checkin writeUp(未完成)
Checkin WriteUp
直接上调试器,定睛一看
一眼UPX, 懒得上工具,直接脱
Pushad指令会把当前八个通用寄存器和一个eflag压入栈中
那么不远处就一定有popad还原现场,我们直接Ctrl+F搜索popad
双击
注意看这个jmp
好家伙,跨区段跳转,基本能确定这里就是跳往原始入口点了
直接F4运行到此处 F8单步
好,Debug编译的,我们直接打开x64dbg自带的Scylla插件
没处理iat那咱就直接Dump,然后 FixDump
Fix dump的时候要选择Dump出来的文件
Ok,脱掉了,我们试试能不能运行
糟糕,并不能运行,上调试器看一下啥原因
C0000005 内存访问异常,发现根本就没这块内存,因为这个exe是有随机基址的,所以脱下来有问题,我们打开CFF Explorer
给这个dll can move属性勾选掉
然后保存
再次进行脱壳
好,这次就可以运行了
随便输入点东西点击kick按钮,会有个MessageBox
我们在MessageBoxA下断,然后往回跟
我们看到,上面那个call的返回值就直接决定了成败与否
我们进去看看
发现了可疑的东西
Cmp eax, 0
Jb xxxx
Jae xxxx
我们知道,jb这条指令是无符号小于则跳转,这都无符号了还怎么小于0, 典型垃圾指令,把jb nop掉
我们发现jae跳转的地方正是下面一条指令的地址+1, 而正好这个call调用的地方根本就不存在,我们把E8这个字节改成90
芜湖,果然是垃圾指令,那么jae这个跳转也可以nop了,没什么用了,一共5-6处这样的垃圾指令,处理掉然后保存文件
记得后缀改exe