近来在脱一个UPX加 的DLL壳时遇到一些问题,希望版主帮忙看看错出在哪了:(
在看了《加密与解密》第二版后,找了个程序作试验,由于我现在没有上传附件的权限,现把我解密的过程写出来,望版主帮忙:)
用Ollydbg110加载目标程序TestDll.dll后程序中断到一下位置:
0096F920 > 807C24 08 01 CMP BYTE PTR SS:[ESP+8],1
0096F925 0F85 91010000 JNZ testdll.0096FABC
0096F92B 60 PUSHAD
0096F92C BE 00D09100 MOV ESI,testdll.0091D000
0096F931 8DBE 0040F5FF LEA EDI,DWORD PTR DS:[ESI+FFF54000]
0096F937 57 PUSH EDI
0096F938 83CD FF OR EBP,FFFFFFFF
0096F93B EB 0D JMP SHORT testdll.0096F94A
按照脱UPX壳的经验,向下找到此处:
0096FA90 31C0 XOR EAX,EAX
0096FA92 8A07 MOV AL,BYTE PTR DS:[EDI] //edi=966bd5-当前基址870000=F6BD5,应该是重定位表的RVA
0096FA94 47 INC EDI
0096FA95 09C0 OR EAX,EAX
0096FA97 74 22 JE SHORT testdll.0096FABB
0096FA99 3C EF CMP AL,0EF
0096FA9B 77 11 JA SHORT testdll.0096FAAE
0096FA9D 01C3 ADD EBX,EAX
0096FA9F 8B03 MOV EAX,DWORD PTR DS:[EBX]
0096FAA1 86C4 XCHG AH,AL
0096FAA3 C1C0 10 ROL EAX,10
0096FAA6 86C4 XCHG AH,AL
0096FAA8 01F0 ADD EAX,ESI
0096FAAA 8903 MOV DWORD PTR DS:[EBX],EAX
0096FAAC ^EB E2 JMP SHORT testdll.0096FA90
0096FAAE 24 0F AND AL,0F
0096FAB0 C1E0 10 SHL EAX,10
0096FAB3 66:8B07 MOV AX,WORD PTR DS:[EDI]
0096FAB6 83C7 02 ADD EDI,2
0096FAB9 ^EB E2 JMP SHORT testdll.0096FA9D
0096FABB 61 POPAD //在这下断,此时EDI=96E318,为重定位表的结束地址
0096FABC ^E9 27B4FBFF JMP testdll.0092AEE8 //此处跳到程序入口EOP处
0092AEE8 55 PUSH EBP //在这用LordPE中Dump出testdll.dll得到dumped.dll
0092AEE9 8BEC MOV EBP,ESP
0092AEEB 83C4 C4 ADD ESP,-3C
0092AEEE B8 58AB9200 MOV EAX,testdll.0092AB58
0092AEF3 E8 30B9F4FF CALL testdll.00876828
0092AEF8 E8 F395F4FF CALL testdll.008744F0
0092AEFD 8D40 00 LEA EAX,DWORD PTR DS:[EAX]
0092AF00 0000 ADD BYTE PTR DS:[EAX],AL
下面问题出现了,在testdll.dll中并不能找到有API调用的位置,怎么才能找到IAT开始和结束的位置,请版主指点一下!!!
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法