关于编译型语言函数的调用(三)(二)

2015-01-27 10:19:18 · 作者: · 浏览: 57
:

?

00531001 >  60              pushad
00531002    E8 03000000     call    0053100A
00531007  - E9 EB045D45     jmp     45B014F7
0053100C    55              push    ebp
0053100D    C3              retn

一开始就发现情形不太对,当然专职搞破解的朋友马上看得出来,这是加壳以后的程序,一开始便运行的是壳的程序,

?

解压或解密出实际的代码,然后跳到实际入口去执行,那么脱壳即可啦,那我们再继续看

?

046620D1    81EC 00040000   sub     esp, 400
046620D7    55              push    ebp
046620D8    8BEC            mov     ebp, esp
046620DA    50              push    eax
046620DB    EB 0E           jmp     short 046620EB
046620DD    838B 84240804 0>or      dword ptr [ebx+4082484], 0
046620E4    00EB            add     bl, ch
046620E6    01F0            add     eax, esi
046620E8    EB 04           jmp     short 046620EE
046620EA    54              push    esp
046620EB  ^ EB F1           jmp     short 046620DE
046620ED    6BEB 0C         imul    ebp, ebx, 0C
046620F0    B7 6B           mov     bh, 6B
046620F2    8D40 FB         lea     eax, dword ptr [eax-5]
046620F5    EB 01           jmp     short 046620F8
046620F7    09EB            or      ebx, ebp
046620F9    06              push    es
046620FA    9B              wait
046620FB    0D EBF4E7E8     or      eax, E8E7F4EB
04662100    EB 0D           jmp     short 0466210F
04662102    9C              pushfd
04662103    FE89 45ECEB03   dec     byte ptr [ecx+3EBEC45]
04662109    BB 4B62EB06     mov     ebx, 6EB624B
0466210E  - 66:EB F3        jmp     short 00002104

在046620EB处 jmp short 046620DE,然而反汇编出来并没有开始为0x046620DE的指令

?

只有046620DD 是 or dword ptr[ebx+....], 0,这是怎么回事呢

我们把046620DD的字节改为int 3即0xCC再看一下

\

直接输入16进制CC一个字节

\

再看反汇编窗口

\

居然变成了

046620DE 8B8424 08040000 mov eax, dword ptr [esp+408]

恰好在jmp的目的地址,这不是欺负老实人吗?

?

不错,这就是花指令,而且是花指令的一种,让你反汇编了以后也是乱的

当然,花指令直接汇编级别的加密,如果你逆向360的程序,你会发现,加载就出现异常了,只能使用静态反汇编

父老常讲,道高一尺,魔高一丈,

世界是美好的,也是丑陋的,既要勇于奉献,也要知道保护自己,才是真正的道理

?

好吧,关于函数的调用,我们就扯这么多,回想起<黑客帝国>,有时候都不知道这世界是不是真实,至少代码应该是真实的吧

好像,又是夜深人静的时候了...