hhhh,我是懒惰虫😪
EzMath2
动调嗯调
直接放入 x32dbg 里动调
找到oep
继续动调,进入main函数内部
更改跳转,跳过反调试
读取字符串之后进行比较
在比较前将输入的字符串放入一个循环中,每轮依次读取2个字符进行加密
对第一个字符和7异或后减1
对第二个字符的加密,要利用循环爆破测试出值
所要对比的值
exp
DASCTF{U_kn0w_M0du1e_rEv~}
去壳 & 花指令
魔改的 UPX 壳,UPX 段名字改为了 FUN 所以使用 upx -d 无法直接脱壳,将文件放入 010Editor 中其名字修改为 UPX 即可脱壳
至于是怎么看出来的嘛,q神说 shellcode 或者查壳工具都能看出来。
将脱了壳的东西拖入 ida 中进行分析,对于函数 sub_4011B4 发现 f5 无法解析
结合汇编语句发现,call 完 sub_4011B4 后在该函数中进行了一个 pop ebx 的操作,这个操作将 call 进来的地址进行了出栈,紧接着的这三个语句
结合起来就相当于一个 jmp 目的地址就是 0x4011CE
结合上面的 call 这一块其实堆栈是平衡的,因为上面的 call 和 pop 是一组,下面的 push 和 retn 是一组
但问题就出在 call 上面,ida 将 call 了之后的东西当成了一个独立的函数也就是 sub_4011B4,单单对于这个函数而言由于多了个 pop ebx 导致栈空间的不平衡,所以 ida 对这个函数的分析就寄了
那么解决方法也就出来了,问题的关键在于这个 pop ebx,而这个 call 和 pop 又是正好实现栈平衡的一组,那么将 call 改成 jmp 然后把无用的 pop ebx 给 nop 掉,将下图中的三句改为一个 jmp
最后修改完成的结果,然后对函数体重新进行识别,具体是将 sub_4011b4 取消,修改一下 sub_401140 的 end 位置
去完花指令的东西就可以被 ida 精准识别了
Android
非预期
flag 是以图片的形式呈现的,解压缩 apk 文件找出来就ok
正解
将apk放入,jadx中
读取用户名和密码
将用户名 user 和 mname = “ccadwjlyah” 进行比较。将输入的密码放入 change() 中改变后和设定的 compare 数组进行比较
根据 change() 和 compare 推出密码
但这个密码是缺失的,因为compare中有一个值未知,不知道这个是干嘛的,也不知道怎么得到这个值
后来查了一下这个值是 ItemTouchHelper 类里的一个常量,固定值是 200,那么解密解出来的东西应该就是对应的 1
结合题目以及现有密码可以推测后面代表的应该是 android,猜测是
f4n_4ndroid 或者 f4n_4ndro1d,最后输入 f4n_4ndro1d 成功
DASCTF{1df456_34hjfk_y3o5c_99gh34_3ndro1d}
本文作者:GhDemi
本文链接: https://ghdemi.github.io/2022/10/07/2022ZJCTF/
文章默认使用 CC BY-NC-SA 4.0 协议进行许可,使用时请注意遵守协议。