MozhuCY's Studio.

MozhuCY's Studio.

Reverse Engineering

ISCC 决赛 android 1000
iscc决赛android 1000解题前序 查了一下apk内部,可以拿到一个.dex,一个.jar和两个.so 解.jar发现其实是一个加密的.dex,将dex转成jar以后发现checkflag的函数 分析checkflag函数 发现其中先定义了一个二维数组,然后将其传入一个enc函数,这个函数是反编译不出来的,应该是加了壳 后分析libcore.so函数,发现其中有一个函数名以及函数的操作很可疑,函数首先将一串加密过的字符串还原,然后经过几个类似于取解密后字符串中的括号括起来的部分,按照函数原有逻辑顺序解一下,发现了主要check函数的名字,后面还接了地址(0x159CBC) 根...
qctf-mips
题目分析 分析代码,首先是第一个函数(简单异或,操作以后和一个长度为5的字符串作比较 比较通过后,进入下一个函数,再次处理后27字符,后发现函数根据i&1的返回值分开了执行顺序,即奇偶分开加密 两端代码极其相似(一开始我弄没做出来,看了好久才发现= =) 实际上这两个操作是一个可逆的高低位互换(高二低六) 放出123456789101112131415161718192021222324#include <stdio.h>#include <stdlib.h>#include <string.h>#include "ida.h"int mai...
安恒月赛pwn100
baby stack 一个简单的栈题,没有开启PIE,开启NX和Canary 程序里没有system函数,所以只能泄漏某函数真实地址然后算出偏移 由于puts函数的特性,可以打印出canary的值,泄漏内存 最后一发栈溢出,打印puts_got的值,注意程序是x64的,函数传参方式是寄存器传参 最后要知道,canary只需要泄漏一次就好 接收数据时.要利用好r.recv() r.recvuntil() exp123456789101112131415161718192021222324252627282930313233343536373839404142434445from pwn ...
Homuranote
cgctf pwn300大概审查思路 据说这题是入门堆题,又是校队考核题目,入门一发堆吧 很经典的note结构,menu getnum switch-case选择功能 checksec 查一下,能开的都开了. IDA打开后反编译,程序大概有5个功能,新建,删除,编辑,查看,退出 新建堆处很正常 删除堆,也就是free处,存在UAF 编辑处可以修改堆内的值 具体攻击思路 fastbin attack劫持 _malloc_hook_ unsorted bin leak 程序基址 配合给好的libc文件进行攻击 具体攻击原理fastbin atacck 一般利用doub...
ISCC逆向wp
re150 upx壳,重定位,选择带壳调试,OD载入,在入口点单步,然后在数据窗口ESP处下硬件断点 运行程序,程序断在popad下一行,此时定位目标字符串,在校验函数处下第二断点 运行程序,从寄存器中跟随,找到扰乱后的测试字符串,跑脚本1234567n = "edfgcbhia0jk98lm76no54pq32rs1"enc = "s_imsaplw_e_siishtnt{g_ialt}F"table = "1234567890abcdefghijklmnopqrs"flag = ""for i in table: flag += enc[n.index(i)...
redhat-re1
主要逻辑 输入一个长度为41的flag,并用221填充到48位. 分成6组每组8字节的块,传入encode函数 异或验证encode函数 生成一个伪随机数key,取8bit,然后base16编码存起来,最终长度为64 将每一个块base16编码为一串长度为16的字符串 进入第二层encode(块)函数 base16decode后,再次异或加密第二层encode函数 首先传入一个base后的16字节,传入key,会输出一个enc_base16的字符串 首先,函数将每个16字节的块,再次分块,使其成为4组4字节的块 然后srand_key传入一个函数,函数会将其扩充为96长度的一个字符串 将...
2018国赛逆向
分析主要逻辑 读入字符串,校验前六位是否为CISCN{ 以”_”为分界,分割字符串. 经历三个验证函数,分别验证各个分割出的字符串 验证函数 首先给v11赋值,然后异或,经正向验证发现,这些为MD5的四个初始常量. 经分析,这几个函数都是以MD5起手的函数 可知每一次的md5生成时,非数字部分会被加密一下 可以很容易的逆回,第二个函数还多了一个异或加密的操作,还原后异或即可 前两个函数反求的MD5可以查出来 最后一个函数还原出的MD5查不出来,爆破很久无果 写文件函数 发现写出文件时,只用到了md5中的两位,而且也只是简单的异或运算 强制绕过验证后,怀疑文件是.jpg文件,考虑用FF...
2017国赛-re200-溯源
初探溯源 查壳, 未发现壳, 拖入IDA分析, 定位主函数, 查看大体逻辑, do-while循环套了一个小的do-while循环. 然后是验证函数, 函数要求一个数组内从0-100递增,而对于此数组赋值过程在do-while循环中. 然后是打印success/fail的函数,但是此处IDA分析错误,差看汇编可知,其实是在验证函数中,不符合条件直接jnz到fail的赋值,随后调回打印函数 赋值函数分析 首先是输入函数,读取字符串,随后将字符串和另一个指针传入一个函数.
CTF二进制入门之路0X00
在大黄狗的建议之下,开通了自己的博客๑乛◡乛๑,我会在这里记录自己在CTF里的点点滴滴。欢迎大家来捧场啊( •̀ .̫ •́ )✧(偶的CSDN:http://blog.csdn.net/mozhucy2.7日总结: 程序中遇到花指令时,可能会造成IDA无法正常显示伪代码,这时候就要考虑用IDC脚本或者Python来去除花指令 (坑人的IDA 7.0。 PE相对固定的文件结构在某些意想不到的时候会有妙用。 是时候看一波~了。 2.9日总结: 在调用rand()函数时,假如没有事先声明srand()的值,那么rand()函数会产生随机数列,但是此随机数列每次生成时都是一样的。注意,随...
ichunqiu-NoExec-200pt
初探NoExec 看到了题目名,感觉会有一点弯子,010查了一波..随便扫了一眼感觉没啥问题,IDA启动! GG了,IDA不能识别程序,跑一下模板好了 模板跑完后发现好像只有程序前半段被识别出来,查一波文件结构顺便复习下 对照后发现,DOS头的e_lfanew被改动过了,观察NT头的位置可以复现,e_lfanew应该是10010000(小端序) NT头仿佛也出现了问题,e_magic居然被改成了PEHA,改回来,Machine改成0x014c的小端形式(I386) 此时文件已经被电脑识别出来,原来是个MFC 双击运行….GG,没跑起来,IDA启动,继续分析,不过这个时候,IDA可以成功的...