皮皮网

【溯源码绿码】【研学平台源码转让】【异地奶粉溯源码查询】od脱壳怎么修改源码_od脱壳脚本

2024-11-06 13:37:36 来源:bootstrop源码

1.脱壳破解

od脱壳怎么修改源码_od脱壳脚本

脱壳破解

       OD载入 隐藏OD 忽略所有异常

       è¿™ä¸ªå£³æ˜¯ç©¿å±±ç”²4.0的 软件官方说是双层加壳 这个我自己也不知道怎么看 全当是吧:)

       ç ”究一晚上发现下三个断点就可以直接找到OEP了!因为这个软件是双进程先要转换为单进程!

       ä¸‹æ–­bp OpenMutexA SHIFT+F9

       7CEC1B > 8BFF MOV EDI,脱壳脱壳溯源码绿码EDI ; ntdll.7C//断在这里

       7CEC1D PUSH EBP

       7CEC1E 8BEC MOV EBP,ESP

       7CEC PUSH ECX

       7CEC PUSH ECX

       7CEC D CMP DWORD PTR SS:[EBP+],0

       7CEC PUSH ESI

       7CEC 0F 7A JE kernel.7CCA7

       æ­¤æ—¶å †æ ˆ

       F DB8 /CALL 到 OpenMutexA 来自 游戏菜单.DB2

       FC F |Access = 1F

       F7A0 |Inheritable = FALSE

       F7A4 FDD8 \MutexName = "C:A5EDE6" //FDD8

       CTRL+G 输入代码

        9C D8 FD C0 E8 2F DB 7C 9D E9 DC 7C

       åœ¨å¤åˆ¶çš„代码处 新建EIP SHIFT+F9 再次断下 F2取消断点 CTRL+G-> 撤消修改

       è¿™æ ·åŒè¿›ç¨‹å°±è½¬æ¢ä¸ºå•è¿›ç¨‹äº†ï¼

       æ­¤æ—¶ ALT+M 打开内存映象 在第一个.RSRC上 F2下断点 SHIFT+F9

       æ–­åœ¨è¿™é‡Œ 不管他 再ALT+M 在 F2下断点 SHIFT+F9

       7CD :8B 0C MOV DX,WORD PTR DS:[EAX+C] //

       7C : B0 MOV WORD PTR SS:[EBP-],DX

       7C 8D LEA ESI,DWORD PTR DS:[EAX+]

       7C MOV DWORD PTR SS:[EBP-],ESI

       7CB 8B 0C MOV EDX,DWORD PTR SS:[EBP+C]

       7CE :F FFFF TEST WORD PTR DS:[EDX+2],0FFFF

       7C JNZ SHORT ntdll.7C

       æ–­åœ¨è¿™é‡Œ 现在就是要用F8慢慢跟了

       D8FF 8B MOV EDX,DWORD PTR DS:[EDX]

       D8F DC MOV DWORD PTR SS:[EBP-],EDX

       D8F D FC FF OR DWORD PTR SS:[EBP-4],FFFFFFFF

       D8F EB JMP SHORT D8F6AB //è·³

       D8FA 6A PUSH 1

       D8FC POP EAX

       D8FD C3 RETN

       D8FE 8B E8 MOV ESP,DWORD PTR SS:[EBP-]

       D8F6A1 D FC FF OR DWORD PTR SS:[EBP-4],FFFFFFFF

       D8F6A5 8B7D MOV EDI,DWORD PTR SS:[EBP+8]

       D8F6A8 8B DC MOV EDX,DWORD PTR SS:[EBP-]

       D8F6AB A1 EDA MOV EAX,DWORD PTR DS:[DAE4]

       D8F6B0 XOR DWORD PTR DS:[EAX+],EDX

       D8F6B6 A1 EDA MOV EAX,DWORD PTR DS:[DAE4]

       D8F6BB XOR DWORD PTR DS:[EAX+],EDX

       D8F6C1 A1 EDA MOV EAX,DWORD PTR DS:[DAE4]

       D8F6C6 8B MOV ECX,DWORD PTR DS:[EAX+]

       D8F6CC 2C XOR ECX,DWORD PTR DS:[EAX+2C]

       D8F6CF XOR ECX,DWORD PTR DS:[EAX+]

       D8F6D2 D FCDA ADD ECX,DWORD PTR DS:[DAFC] ; 游戏菜单.

       D8F6D8 8B MOV EDX,DWORD PTR DS:[EDI]

       D8F6DA D2 TEST EDX,EDX

       D8F6DC 1B JNZ SHORT D8F6F9 //è·³

       D8F6DE FF PUSH DWORD PTR DS:[EDI+]

       D8F6E1 FF PUSH DWORD PTR DS:[EDI+]

       D8F6E4 FF PUSH DWORD PTR DS:[EDI+]

       D8F6E7 8B MOV EDX,DWORD PTR DS:[EAX+]

       D8F6ED XOR EDX,DWORD PTR DS:[EAX+]

       D8F6F0 XOR EDX,DWORD PTR DS:[EAX+4]

       D8F6F9 FA CMP EDX,1 //跳到这里 再F8

       D8F6FC 1E JNZ SHORT D8FC

       D8F6FE FF PUSH DWORD PTR DS:[EDI+4]

       D8F FF PUSH DWORD PTR DS:[EDI+8]

       D8F 6A PUSH 0

       D8F FF 0C PUSH DWORD PTR DS:[EDI+C]

       D8F 8B MOV EDX,DWORD PTR DS:[EAX+]

       D8FF XOR EDX,DWORD PTR DS:[EAX+]

       D8F XOR EDX,DWORD PTR DS:[EAX+4]

       D8F 2BCA SUB ECX,EDX

       D8F FFD1 CALL ECX ; 游戏菜单.FE //这里就是OEP F7

       F7后到这里

       FE PUSH EBP //这就是OEP 看样子是DELPHI的

       FE 8BEC MOV EBP,ESP

       FEB C4 F0 ADD ESP,-

       FEE B8 DC4F MOV EAX,游戏菜单.FDC

       FE E8 F0FF CALL 游戏菜单.B0

       FE A1 B MOV EAX,DWORD PTR DS:[B4]

       FED 8B MOV EAX,DWORD PTR DS:[EAX]

       FEF E8 9CA4F7FF CALL 游戏菜单.D0

       OD不要关 -- 打开LordPE-修正映象大小--完全转存--保存为*.EXE文件 好作到这里先停着 从新加载一次目标文件 再重复作下面这个操作

       ä¸‹æ–­bp OpenMutexA SHIFT+F9

       7CEC1B > 8BFF MOV EDI,EDI ; ntdll.7C//断在这里

       7CEC1D PUSH EBP

       7CEC1E 8BEC MOV EBP,ESP

       7CEC PUSH ECX

       7CEC PUSH ECX

       7CEC D CMP DWORD PTR SS:[EBP+],0

       7CEC PUSH ESI

       7CEC 0F 7A JE kernel.7CCA7

       æ­¤æ—¶å †æ ˆ

       F DB8 /CALL 到 OpenMutexA 来自 游戏菜单.DB2

       FC F |Access = 1F

       F7A0 |Inheritable = FALSE

       F7A4 FDD8 \MutexName = "C:A5EDE6" //FDD8

       CTRL+G 输入代码

        9C D8 FD C0 E8 2F DB 7C 9D E9 DC 7C

       åœ¨å¤åˆ¶çš„代码处 新建EIP SHIFT+F9 再次断下 F2取消断点 CTRL+G-> 撤消修改

       è¿™æ ·åŒè¿›ç¨‹å°±è½¬æ¢ä¸ºå•è¿›ç¨‹äº†

       å› ä¸ºç¬¬ä¸€æ¬¡ä¿å­˜çš„是没有跳过IAT加密的文件也就是 魔法跳转 没有修改 所以运行时会出问题

       ä¸‹é¢æˆ‘们来修改 魔法跳转 并去跳过IAT加密 下断点 HE GetModuleHandleA SHIFT+F9运行

       ä¸­æ–­åœ¨

       7CB > 8BFF MOV EDI,EDI ; ntdll.7C //断中这里;注意看堆栈

       7CBB PUSH EBP

       7CBC 8BEC MOV EBP,ESP

       7CBE D CMP DWORD PTR SS:[EBP+8],0

       7CB JE SHORT kernel.7CBC

       7CB FF PUSH DWORD PTR SS:[EBP+8]

       7CB E8 D CALL kernel.7CE2A4

       7CBC C0 TEST EAX,EAX

       æ­¤æ—¶å †æ ˆè¿”回

       FF F4FB /CALL 到 GetModuleHandleA 来自 mz.F4F5

       FF3C \pModule = NULL

       FF

       ä¸‹é¢æ˜¯æ¯æ¬¡ F9的堆栈返回

       F9+1

       E CB2 /CALL 到 GetModuleHandleA 来自 CAC

       E BEBC \pModule = "kernel.dll"

       EC CA

       F9+2

       EC D4A4 /CALL 到 GetModuleHandleA 来自 msctfime.DE

       EC7C EC \pModule = "C:\WINDOWS\system

       tdll.dll"

       EC C3A

       F9+3

       E FBB0 /CALL 到 GetModuleHandleA 来自 FBAA

       E FFF4 \pModule = "KERNEL.DLL"

       EC

       F9+4

       F6B8 F8D7B /CALL 到 GetModuleHandleA 来自 mz.F8D

       F6BC \pModule = NULL

       F6C0 B8

       F9+5

       C DFF1 /CALL 到 GetModuleHandleA 来自 DFEB //此时缓冲时间有点长

        DD6C \pModule = "kernel.dll"

        DD7C ASCII "VirtualAlloc" //看到这个就差不多快到了

       F9+6

       C DE /CALL 到 GetModuleHandleA 来自 D

        DD6C \pModule = "kernel.dll"

        DD ASCII "VirtualFree" //看到这个下一次就是返回时机了

       F9+7

       C D /CALL 到 GetModuleHandleA 来自 DF //就是这里

        \pModule = "kernel.dll"

        EBA4

       è°ƒå¼ï¼ï¼ç¡¬ä»¶æ–­ç‚¹ï¼ï¼åˆ é™¤æ–­ç‚¹ï¼ï¼ALT+F9返回

       D 8B0D CFD MOV ECX,DWORD PTR DS:[D9CF] //返回到这里

       DB E MOV DWORD PTR DS:[ESI+ECX],EAX

       DE A1 CFD MOV EAX,DWORD PTR DS:[D9CF]

       D C CMP DWORD PTR DS:[ESI+EAX],EDI

       D JNZ SHORT DE

       D 8D DCFEFFFF LEA EAX,DWORD PTR SS:[EBP-]

       DE PUSH EAX

       DF FF E0D CALL DWORD PTR DS:[D8E] ; kernel.LoadLibraryA

       //不记得是哪位大哥说过 在返回的LoadLibraryA下面的第一个JE就是MJ了 呵呵

       D 8B0D CFD MOV ECX,DWORD PTR DS:[D9CF]

       DB E MOV DWORD PTR DS:[ESI+ECX],EAX

       DE A1 CFD MOV EAX,DWORD PTR DS:[D9CF]

       D C CMP DWORD PTR DS:[ESI+EAX],EDI

       D 0F 2F JE DAB //这个就是我们要找的MJ了 JE改为JMP

       DC C9 XOR ECX,ECX

       DE 8B MOV EAX,DWORD PTR DS:[EBX]

       D CMP DWORD PTR DS:[EAX],EDI

       D JE SHORT DA

       è¿™æ—¶æˆ‘们再下另一个断点 BP GetTickCount SHIFT+F9 运行

       ä¸­æ–­åœ¨è¿™é‡Œ

       7CAC > BA FE7F MOV EDX,7FFE //中断点

       7CB1 8B MOV EAX,DWORD PTR DS:[EDX]

       7CB3 F MUL DWORD PTR DS:[EDX+4]

       7CB6 0FACD0 SHRD EAX,EDX,

       7CBA C3 RETN

       F2取消断点 ALT+F9 返回程序

       è¿”回到这里

       D8C FF 7CD CALL DWORD PTR DS:[DC] ; kernel.GetTickCount

       D8C A4D4FFFF MOV DWORD PTR SS:[EBP-2B5C],EAX

       D8CF 6A PUSH 1

       D8C POP EAX

       D8C C0 TEST EAX,EAX

       D8C 0F A JE D8C3C2

       çœ‹åˆ°ä»£ç 

       D8C FF 7CD CALL DWORD PTR DS:[DC] ; kernel.GetTickCount //这里了 一共有两处 向下找另一处

       å¦ä¸€å¤„代码

       D8C3C2 FF 7CD CALL DWORD PTR DS:[DC] ; kernel.GetTickCount //另一处

       D8C3C8 2B A4D4FFFF SUB EAX,DWORD PTR SS:[EBP-2B5C]

       D8C3CE 8B8D A8D4FFFF MOV ECX,DWORD PTR SS:[EBP-2B]

       D8C3D4 6BC9 IMUL ECX,ECX,

       D8C3D7 C1 D ADD ECX,7D0

       D8C3DD 3BC1 CMP EAX,ECX

       D8C3DF JBE SHORT D8C3E8 //把这个改为 JMP 再F9运行

       ç¨‹åºåœåœ¨

       D8C 8B8D C1FFFF MOV ECX,DWORD PTR SS:[EBP-3EE8]

       D8CD 8B MOV ECX,DWORD PTR DS:[ECX]

       D8CF MOV DWORD PTR DS:[ECX],EAX

       D8C 8B C1FFFF MOV EAX,DWORD PTR SS:[EBP-3EE8]

       D8C C0 ADD EAX,4

       D8CA C1FFFF MOV DWORD PTR SS:[EBP-3EE8],EAX

       D8C ^ EB CA JMP SHORT D8CC

       D8C XCHG EAX,ESI

       D8C :C9 XCHG CX,CX

       D8C XCHG EAX,ESI

       çŽ°åœ¨æˆ‘们再打开ImportREC--OEP处填写FE (FE-)--自动查找IAT--获取输入表--显示无效的--剪切指针--修复转存文件--选中你用LORDPE保存的EXE文件 OK 完成