汗,前两壳斑竹竟然没点一下就这样让它掉下去。。这可以是我的成就啊。没事。。
今天晚上我在给大家上一课。
今天上课之前我给大家布置一个任务,你们要将这个东西给背下来。
cmp a,b 比较a与b
test a,b
mov a,b 把b的值送给a
ret 返回主程序
nop 无作用,英文“no operation”的简写,意思是“do nothing”(机器码90)***机器码的含义参看上面
(解释:ultraedit打开编辑exe文件时你看到90,等同于汇编语句nop)
call 调用子程序
je 或jz 若相等则跳(机器码74 或0F84)
jne或jnz 若不相等则跳(机器码75或0F85)
jmp 无条件跳(机器码EB)
jb 若小于则跳
ja 若大于则跳
jg 若大于则跳
jge 若大于等于则跳
jl 若小于则跳
jle 若小于等于则跳
pop 出栈
push 压栈
今天我们来学习PECompact脱壳, PECompact也是一种压缩壳,强度一般。我们以win98中的记事本为例,它的OEP是4010CC。
第一步,先侦壳,侦壳工具为peid0.92是PECompact 1.68 - 1.84 -> Jeremy Collake加的壳,我们请出调试利器:Ollydbg1.09,载入程序
0040AB20 > EB 06 JMP SHORT PECompac.0040AB28 第一个就是个跳
0040AB22 68 CC100000 PUSH 10CC
0040AB27 C3 RETN
0040AB28 9C PUSHFD
0040AB29 60 PUSHAD
0040AB2A E8 02000000 CALL PECompac.0040AB31 这里有个CALL,我们F7进去不然程序运行了
0040AB2F 33C0 XOR EAX,EAX
0040AB31 8BC4 MOV EAX,ESP
0040AB33 83C0 04 ADD EAX,4
可能你们会问。我们怎么知道这个CALL该进不该进啊。。这里我教你们一个笨方法,遇到CALL时F8走过去如果运行了我们就从新载入从来,这不就可以了。
进入CALL后我们继续走,一直走到这
0040D24D 57 PUSH EDI
0040D24E AD LODS DWORD PTR DS:[ESI]
0040D24F 85C0 TEST EAX,EAX
0040D251 0F84 9B000000 JE PECompac.0040D2F2 这里有个跳,没实现,我们要让他实现。回车进去F4运行所选
0040D257 8BD0 MOV EDX,EAX
0040D259 0395 E6904000 ADD EDX,DWORD PTR SS:[EBP+4090E6]
0040D25F AD LODS DWORD PTR DS:[ESI]
0040D260 56 PUSH ESI
0040D261 8BC8 MOV ECX,EAX
0040D263 57 PUSH EDI
0040D264 52 PUSH EDX
0040D265 8DB5 6BA14000 LEA ESI,DWORD PTR SS:[EBP+40A16B]
再走
0040D2F2 5F POP EDI
0040D2F3 8BB5 E2904000 MOV ESI,DWORD PTR SS:[EBP+4090E2]
0040D2F9 AD LODS DWORD PTR DS:[ESI]
0040D2FA 83F8 FF CMP EAX,-1
0040D2FD 74 74 JE SHORT PECompac.0040D373 又是个没实现的跳,我们一样让它实现,回车进去F4
0040D2FF 0385 E6904000 ADD EAX,DWORD PTR SS:[EBP+4090E6]
0040D305 8BD8 MOV EBX,EAX
0040D307 AD LODS DWORD PTR DS:[ESI]
0040D308 0385 E6904000 ADD EAX,DWORD PTR SS:[EBP+4090E6]
再走
0040D39D 03DE ADD EBX,ESI
0040D39F 49 DEC ECX
0040D3A0 74 72 JE SHORT PECompac.0040D414 又是一样进去让它实现
0040D3A2 78 70 JS SHORT PECompac.0040D414
0040D3A4 66:8B07 MOV AX,WORD PTR DS:[EDI]
0040D3A7 2C E8 SUB AL,0E8
0040D3A9 3C 01 CMP AL,1
走
0040D414 5F POP EDI
0040D415 59 POP ECX
0040D416 33C0 XOR EAX,EAX
0040D418 85C9 TEST ECX,ECX
0040D41A 74 3B JE SHORT PECompac.0040D457 一样实现它
0040D41C 8BF7 MOV ESI,EDI
0040D41E 33C0 XOR EAX,EAX
0040D420 83F9 04 CMP ECX,4
再走
0040D54E 61 POPAD 这是壳的出口标志,但这不是真正的出口,我们继续走
0040D54F 9D POPFD
0040D550 50 PUSH EAX
0040D551 68 CC104000 PUSH PECompac.004010CC
0040D556 C2 0400 RETN 4
0040D559 8BB5 5B974000 MOV ESI,DWORD PTR SS:[EBP+40975B]
0040D55F 0BF6 OR ESI,ESI
走
004010CC 55 PUSH EBP 到了这,这就是我们的真正出口了,上节课有说。直接DUMP
004010CD 8BEC MOV EBP,ESP
004010CF 83EC 44 SUB ESP,44
004010D2 56 PUSH ESI
004010D3 FF15 E4634000 CALL DWORD PTR DS:[4063E4] ; kernel32.GetCommandLineA
004010D9 8BF0 MOV ESI,EAX
004010DB 8A00 MOV AL,BYTE PTR DS:[EAX]
004010DD 3C 22 CMP AL,22
今天脱壳就到这。。。。。斑竹点亮下别掉下去了,如果大家学得好,我将教大家破解一些简单的挂。虽然我没录象但我觉得我的文字讲述很清楚