各位大哥好,来看雪好久了,还是第一次向大家请教呢,请大大们指点:
手头有一文件,被加壳,用看雪的PEiD 查看是UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo,PESniffer查看是UPX v0.89.6 - v1.02 / v1.05 - v1.22。
下面是我用OD操作的一些代码,希望大大们别看晕了,OD载入后
00413CE0 > 60 PUSHAD
00413CE1 BE 00D04000 MOV ESI,dllexp.0040D000
00413CE6 8DBE 0040FFFF LEA EDI,DWORD PTR DS:[ESI+FFFF4000]
00413CEC 57 PUSH EDI
00413CED 83CD FF OR EBP,FFFFFFFF
00413CF0 EB 10 JMP SHORT dllexp.00413D02
这个没有什么特殊的,都差不多
遵循着UPX壳的特点操作方法,往后跳不往回跳,n次F4 和F8之后来到这里,奇怪出现了,
00413E1B 57 PUSH EDI
00413E1C 48 DEC EAX
00413E1D F2:AE REPNE SCAS BYTE PTR ES:[EDI]
00413E1F 55 PUSH EBP <----大大们就是这个地方传说中的OEP怎么可能在POPAD之前就出现了呢,应该在POPAD之后的那个大跳转的目的地址里面呢
00413E20 FF96 30410100 CALL DWORD PTR DS:[ESI+14130]
00413E26 09C0 OR EAX,EAX
00413E28 74 07 JE SHORT dllexp.00413E31
00413E2A 8903 MOV DWORD PTR DS:[EBX],EAX
00413E2C 83C3 04 ADD EBX,4
00413E2F ^ EB D8 JMP SHORT dllexp.00413E09
00413E31 FF96 38410100 CALL DWORD PTR DS:[ESI+14138]
00413E37 8BAE 34410100 MOV EBP,DWORD PTR DS:[ESI+14134]
00413E3D 8DBE 00F0FFFF LEA EDI,DWORD PTR DS:[ESI-1000]
00413E43 BB 00100000 MOV EBX,1000
00413E48 50 PUSH EAX
00413E49 54 PUSH ESP
00413E4A 6A 04 PUSH 4
00413E4C 53 PUSH EBX
00413E4D 57 PUSH EDI
00413E4E FFD5 CALL EBP
00413E50 8D87 07020000 LEA EAX,DWORD PTR DS:[EDI+207]
00413E56 8020 7F AND BYTE PTR DS:[EAX],7F
00413E59 8060 28 7F AND BYTE PTR DS:[EAX+28],7F
00413E5D 58 POP EAX
00413E5E 50 PUSH EAX
00413E5F 54 PUSH ESP
00413E60 50 PUSH EAX
00413E61 53 PUSH EBX
00413E62 57 PUSH EDI
00413E63 FFD5 CALL EBP
00413E65 58 POP EAX
00413E66 61 POPAD <------这里应该是脱壳见曙光的地方
00413E67 8D4424 80 LEA EAX,DWORD PTR SS:[ESP-80]
00413E6B 6A 00 PUSH 0
00413E6D 39C4 CMP ESP,EAX
00413E6F ^ 75 FA JNZ SHORT dllexp.00413E6B
00413E71 83EC 80 SUB ESP,-80 <----如果没有以上5行就和教程上的一样了
00413E74 - E9 9963FFFF JMP dllexp.0040A212 <------正常这里应该是跳到OEP去的,可是现在不是了
00413E79 0000 ADD BYTE PTR DS:[EAX],AL
00413E7B 0000 ADD BYTE PTR DS:[EAX],AL
00413E7D 0000 ADD BYTE PTR DS:[EAX],AL
00413E7F 0000 ADD BYTE PTR DS:[EAX],AL
00413E81 0000 ADD BYTE PTR DS:[EAX],AL
请大大们指点一下,
[课程]Linux pwn 探索篇!