才弄的,不要跟我说看不懂,除非你没学过逆向分析或者新手,
下面的反汇编代码是一个程序未加壳之前直接载入OD那一部分,
不是00401000
这个没上面技巧,要靠自己慢慢看编译器预处理的代码,和自己在OD里面键入反调试以及其他。。。。。
补充一点,向逻辑真这种也可以修改掉比如,我CALL Messagebox,我说的假如,
这个TEST比较是否成功,下面就是跳转JZ或其他,我们明明知道,MessageBox%99就会调用成功,所以可以把不成功的部分也修改掉!大家修改的时候尽量别显露出代码被修改过的样子,如果被人家看出来代码被修改过,知道结果吧!下面看我的反汇编代码,有注释,大家可以自己写个程序自己慢慢弄!
代码加注释:
00401110 > $ 55 PUSH EBP
00401111 . 89E5 MOV EBP,ESP
00401113 . 6A FF PUSH -1
00401115 . 68 18704000 PUSH 代码乱序.00407018
0040111A . 68 78164000 PUSH 代码乱序.00401678 ; SE 处理程序安装
0040111F . 64:FF35 0000000>PUSH DWORD PTR FS:[0]
00401126 . 64:8925 0000000>MOV DWORD PTR FS:[0],ESP
0040112D . 83EC 0C SUB ESP,0C
00401130 . 53 PUSH EBX
00401131 . 56 PUSH ESI
00401132 . 57 PUSH EDI
00401133 . 8965 E8 MOV DWORD PTR SS:[EBP-18],ESP
00401136 68 00000002 PUSH 2000000 //这里和下面的CALL跟进去发现是把2000000放入EAX,但是下面又使用EAX,而且并没用EAX作为参数
0040113B E8 301F0000 CALL 代码乱序.00403070 //调用函数,因此我们直接NOP掉,改为一个CALL调用来检查调试器.并且直接用200000来放入下面处理的
00401140 . 59 POP ECX
00401141 . A3 18854000 MOV DWORD PTR DS:[408518],EAX //过程,我们改为 mov dword ptr ds:[408518],2000000,上面的就写CALL,
00401146 . E8 45070000 CALL 代码乱序.00401890 //这里是创建堆栈,不能更改
0040114B . 85C0 TEST EAX,EAX //但是这里是比较创建成功没有,我们可以想象到,创建不成功就是直接退出,因此,更改下面退出的CALL
0040114D . 75 0D JNZ SHORT 代码乱序.0040115C
0040114F . 6A 01 PUSH 1 //更改
00401151 . E8 3A080000 CALL 代码乱序.00401990 //更改,这里是退出,下面有个JMP,是跳到最下面的文件运行成功结束,我们保留JMP就可以了
00401156 . 59 POP ECX //更改
00401157 . E9 9B000000 JMP 代码乱序.004011F7
0040115C > C745 FC 0000000>MOV DWORD PTR SS:[EBP-4],0
00401163 . E8 38080000 CALL 代码乱序.004019A0 //这里不知道进行了什么处理,里面有一大堆OR和比较,我们直接更改
00401168 . E8 C3080000 CALL 代码乱序.00401A30 // 调用GetSystemTimeAsFileTime,这函数看似没什么用.直接修改.
0040116D . E8 0E090000 CALL 代码乱序.00401A80
00401172 . E8 290D0000 CALL 代码乱序.00401EA0
00401177 . E8 C40D0000 CALL 代码乱序.00401F40
0040117C . BB D87C4000 MOV EBX,代码乱序.00407CD8
00401181 . 81FB D87C4000 CMP EBX,代码乱序.00407CD8
00401187 . 73 0D JNB SHORT 代码乱序.00401196 //这里是个比较,下面是单步到00000000,因此,我们可以想象上面的CALL是在处理EIP
00401189 > FF13 CALL DWORD PTR DS:[EBX] //下面的直接修改
0040118B . 83C3 04 ADD EBX,4
0040118E . 81FB D87C4000 CMP EBX,代码乱序.00407CD8
00401194 .^ 72 F3 JB SHORT 代码乱序.00401189 //一直修改到这里
00401196 > A1 04854000 MOV EAX,DWORD PTR DS:[408504]
0040119B . 50 PUSH EAX
0040119C . A1 00854000 MOV EAX,DWORD PTR DS:[408500]
004011A1 . 50 PUSH EAX
004011A2 . E8 A9FEFFFF CALL 代码乱序.00401050 //调用我们的程序了,下面的大家自己跟踪,程序退出也可以检查调试器,
004011A7 . 83C4 08 ADD ESP,8 //大家可以一条一条跟踪下,以便自己的反调试,可以在神不知鬼不觉的情况下检查调试器!
004011AA . 89C3 MOV EBX,EAX //不想一个一个跟踪的话大家把主要目标放在比较上面和CALL上面,用OD打开,在直接点击CALL
004011AC . BE D87C4000 MOV ESI,代码乱序.00407CD8 //,看到没用处的CALL就直接修改.
004011B1 . 81FE D87C4000 CMP ESI,代码乱序.00407CD8
004011B7 . 73 0D JNB SHORT 代码乱序.004011C6
004011B9 > FF16 CALL DWORD PTR DS:[ESI]
004011BB . 83C6 04 ADD ESI,4
004011BE . 81FE D87C4000 CMP ESI,代码乱序.00407CD8
004011C4 .^ 72 F3 JB SHORT 代码乱序.004011B9
004011C6 > 53 PUSH EBX
004011C7 . E8 440E0000 CALL 代码乱序.00402010
004011CC . 59 POP ECX
004011CD . EB 28 JMP SHORT 代码乱序.004011F7
004011CF . 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14]
004011D2 . 8B00 MOV EAX,DWORD PTR DS:[EAX]
004011D4 . 8B00 MOV EAX,DWORD PTR DS:[EAX]
004011D6 . 8945 E4 MOV DWORD PTR SS:[EBP-1C],EAX
004011D9 . 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14]
004011DC . 50 PUSH EAX
004011DD . 8B45 E4 MOV EAX,DWORD PTR SS:[EBP-1C]
004011E0 . 50 PUSH EAX
004011E1 . E8 8A0E0000 CALL 代码乱序.00402070
004011E6 . 83C4 08 ADD ESP,8
004011E9 . C3 RETN
004011EA . 8B65 E8 MOV ESP,DWORD PTR SS:[EBP-18]
004011ED . 8B45 E4 MOV EAX,DWORD PTR SS:[EBP-1C]
004011F0 . 50 PUSH EAX
004011F1 . E8 9A070000 CALL 代码乱序.00401990
004011F6 . 59 POP ECX
004011F7 > 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10]
004011FA . 64:890D 0000000>MOV DWORD PTR FS:[0],ECX
00401201 . 5F POP EDI
00401202 . 5E POP ESI
00401203 . 5B POP EBX
00401204 . 89EC MOV ESP,EBP
00401206 . 5D POP EBP
00401207 . C3 RETN
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法