易语言去除脱壳校验+去除定时退出
本帖最后由 Shy 于 2016-7-20 21:18 编辑悬赏帖:https://www.52hb.com/thread-25835-1-1.html
本教程由热情洋溢的木木不哭赞助播出(“哎呀我摔倒了要漂亮姐姐亲亲才能起来{:5_187:}”)
逆向前言:虽然说已经解决了,但是我搞了将近三个小时,基本上弄懂了它的校验方式,,故放出图文供参考,写完睡觉 ,,,,
脱壳校验:
一开始我以为是用函数GetFileSize,然后一直都断不下,所以我就换了个函数,,,
因为这个脱壳校验是在程序登录时候,如果发现获取的文件尺寸大于2DADE0,换成10进制为2993632,大概是2.85M左右,然后就会出现程序无故退出的情况
首先运行软件,然后我们再下好获取文件尺寸的断点FindFirstFileA,或者是FindClose,否则会一直断下的,,,这点需要注意
在堆栈窗口出现文件名的时候,我们再返回到程序领空
所以直接把这个jl改成jmp,程序就不会出现登录以后退出的情况
---------------------------------------------------------------------分割
定时退出:
这个程序PJ完毕以后,还会出现延迟退出的情况,我们知道 易语言此种情况一般有三种写法,
1.延迟(Time)单位ms
2.延时(Time)单位ms
3.时钟.时钟周期
据我分析,这个程序是第三种情况,延时的话很容易找到,
延时的OD代码表现为:
0040100F 68 01030080 push 0x80000301
00401014 6A 00 push 0x0
00401016 68 B80B0000 push 0xBB8 (转换为10进制就是延时的时间,刚好为3000)
0040101B 68 01000000 push 0x1
00401020 BB 60134000 mov ebx, 00401360
00401025 E8 88000000 call 004010B2
延时特征码:
8B 44 24 0C 33 C9 8B 00 85 C0 0F 9C C1 49 23 C1 50
00401360 8B4424 0C mov eax, dword ptr
00401364 33C9 xor ecx, ecx
00401366 8B00 mov eax, dword ptr
00401368 85C0 test eax, eax
0040136A 0F9CC1 setl cl
0040136D 49 dec ecx
0040136E 23C1 and eax, ecx
00401370 50 push eax
00401371 FF15 B4C24700 call dword ptr [<&KERNEL32.Sleep>] ; kernel32.Sleep
00401377 C3 retn
很显然在我们下断后,这里没有触发,那么就要考虑是不是用的延迟或者是时钟了,延迟我好像记得应该是精易模块的命令,所以我先猜测的是时钟
那么我们下时钟断点以后,SetTimer,找到了这里
我们看右下角的堆栈,发现了大概是延迟一分钟左右,就会退出,那么我们要么把这里改掉,不让他创建时钟,要么就去找退出
有想动手的朋友可以试试把时间改为0,看看有没有效果
退出:
退出的找法就简单了,他的退出并不是简单的调用ExitProcess,他用的命令是销毁
易语言结束进程的写法太多,这里我了解也不多,就不说明了
所以大家自己用销毁命令找一个特征码就可以了
83 EC 1C 56 8B 74 24 2C 8B 46 08 3D 01 02 00 80
当然这里最简单的办法就是用按钮事件,直接可以找到
段首改成retn即可,,,
关于程序的逆向,我看看明天能不能搞,能搞就放出方法
编程基础决定逆向切入点的灵活性!感谢楼主的教程 先点赞、再学习 感谢楼主的教程,新手学习中。 这个必须点个赞! 感谢楼主分享! 高手,学习了
页:
[1]
2