【文章标题】: 脱arm求教
【文章作者】: noNaMe-mOnk
【软件名称】: 阿达连连看
【下载地址】: 自己搜索下载
【使用工具】: od,peid
【操作平台】: XP SP2
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
od载入:
004E2000 > 60 PUSHAD *************停在这里
004E2001 E8 00000000 CALL adalinks.004E2006
004E2006 5D POP EBP
004E2007 50 PUSH EAX
004E2008 51 PUSH ECX
004E2009 0FCA BSWAP EDX
004E200B F7D2 NOT EDX
004E200D 9C PUSHFD
004E200E F7D2 NOT EDX
004E2010 0FCA BSWAP EDX
忽略所有异常,在添加以下几个:
C0000005(ACCESS VIOLATION)
C000001D(ILLEGAL INSTRUCTION)
C000001E(INVALID LOCK SEQUENCE)
C0000096(PRIVILEGED INSTRUCTION)
先下OpenMutexA断点shift+F9运行
7C80EC1B > 8BFF MOV EDI,EDI 断在这里
7C80EC1D 55 PUSH EBP
7C80EC1E 8BEC MOV EBP,ESP
7C80EC20 51 PUSH ECX
7C80EC21 51 PUSH ECX
7C80EC22 837D 10 00 CMP DWORD PTR SS:[EBP+10],0
7C80EC26 56 PUSH ESI
7C80EC27 0F84 7A500300 JE kernel32.7C843CA7
7C80EC2D 64:A1 18000000 MOV EAX,DWORD PTR FS:[18]
7C80EC33 FF75 10 PUSH DWORD PTR SS:[EBP+10]
堆栈:
0013D784 004B99B8 /CALL 到 OpenMutexA 来自 adalinks.004B99B2
0013D788 001F0001 |Access = 1F0001
0013D78C 00000000 |Inheritable = FALSE
0013D790 0013DDC4 \MutexName = "F04::DAF97CCD66"
Ctrl+G 401000
00401000 60 PUSHAD
00401001 9C PUSHFD
00401002 68 C4DD1300 PUSH 13DDC4 ★ 堆栈里看到的值 ; ASCII "F04::DAF97CCD66"
00401007 33C0 XOR EAX,EAX
00401009 50 PUSH EAX
0040100A 50 PUSH EAX
0040100B E8 2FDB407C CALL kernel32.CreateMutexA
00401010 9D POPFD
00401011 61 POPAD
00401012 -E9 04DC407C JMP kernel32.OpenMutexA
在401000新建EIP
F9运行
断在这里:
7C80EC1B > 8BFF MOV EDI,EDI
7C80EC1D 55 PUSH EBP
7C80EC1E 8BEC MOV EBP,ESP
7C80EC20 51 PUSH ECX
7C80EC21 51 PUSH ECX
7C80EC22 837D 10 00 CMP DWORD PTR SS:[EBP+10],0
7C80EC26 56 PUSH ESI
取消断点
Ctrl+G 401000
取消刚才输入的代码。
下GetModuleHandleA断点F9运行
7C80B529 > 8BFF MOV EDI,EDI 断在这里
7C80B52B 55 PUSH EBP
7C80B52C 8BEC MOV EBP,ESP
7C80B52E 837D 08 00 CMP DWORD PTR SS:[EBP+8],0
7C80B532 74 18 JE SHORT kernel32.7C80B54C
7C80B534 FF75 08 PUSH DWORD PTR SS:[EBP+8]
7C80B537 E8 682D0000 CALL kernel32.7C80E2A4
堆栈:
0013CE50 5D175394 /CALL 到 GetModuleHandleA 来自 5D17538E
0013CE54 5D1753E0 \pModule = "kernel32.dll"
0013CF10 77F45BB0 /CALL 到 GetModuleHandleA 来自 SHLWAPI.77F45BAA
0013CF14 77F44FF4 \pModule = "KERNEL32.DLL"
0013D728 004B8AF3 /CALL 到 GetModuleHandleA 来自 adalinks.004B8AED
0013D72C 00000000 \pModule = NULL
00137A6C 00B8530E /CALL 到 GetModuleHandleA 来自 00B85308
00137A70 00B98BAC \pModule = "kernel32.dll"
00137A74 00B99CC4 ASCII "VirtualAlloc"
00137A6C 00B8532B /CALL 到 GetModuleHandleA 来自 00B85325
00137A70 00B98BAC \pModule = "kernel32.dll"
00137A74 00B99CB8 ASCII "VirtualFree"
001377D0 00B74F9E /CALL 到 GetModuleHandleA 来自 00B74F98 //在这里取消断点,Alt+F9,返回
001377D4 00137920 \pModule = "kernel32.dll"
返回到这里:
00B74F9E 8B0D AC0DBA00 MOV ECX,DWORD PTR DS:[BA0DAC]
00B74FA4 89040E MOV DWORD PTR DS:[ESI+ECX],EAX
00B74FA7 A1 AC0DBA00 MOV EAX,DWORD PTR DS:[BA0DAC]
00B74FAC 391C06 CMP DWORD PTR DS:[ESI+EAX],EBX
00B74FAF 75 16 JNZ SHORT 00B74FC7
00B74FB1 8D85 B4FEFFFF LEA EAX,DWORD PTR SS:[EBP-14C]
00B74FB7 50 PUSH EAX
00B74FB8 FF15 B432B900 CALL DWORD PTR DS:[B932B4] ; kernel32.LoadLibraryA
00B74FBE 8B0D AC0DBA00 MOV ECX,DWORD PTR DS:[BA0DAC]
00B74FC4 89040E MOV DWORD PTR DS:[ESI+ECX],EAX
00B74FC7 A1 AC0DBA00 MOV EAX,DWORD PTR DS:[BA0DAC]
00B74FCC 391C06 CMP DWORD PTR DS:[ESI+EAX],EBX
00B74FCF 0F84 2F010000 JE 00B75104 //修改为jmp,下he GetCurrentThreadId断点
00B74FD5 33C9 XOR ECX,ECX
00B74FD7 8B07 MOV EAX,DWORD PTR DS:[EDI]
00B74FD9 3918 CMP DWORD PTR DS:[EAX],EBX
00B74FDB 74 06 JE SHORT 00B74FE3
00B74FDD 41 INC ECX
F9:
7C809737 > 64:A1 18000000 MOV EAX,DWORD PTR FS:[18] //断在这里
7C80973D 8B40 24 MOV EAX,DWORD PTR DS:[EAX+24]
7C809740 C3 RETN
堆栈:
00137090 66001E3A /CALL 到 GetCurrentThreadId 来自 66001E34
00137094 00000001
00137098 66001C1E 返回到 66001C1E 来自 66001DE6
0013709C 66001B64 返回到 66001B64 来自 66001B90
001370A0 66000000
001370A4 00000001
001370A8 00000000
001370AC 00000001
001370B0 001370CC
第二次F9:堆栈
00137070 66003505 /CALL 到 GetCurrentThreadId 来自 660034FF
00137074 00000000
00137078 6610E470
0013707C 6610E4D8
00137080 /00137098
00137084 |660034DF 返回到 660034DF 来自 660034EB
00137088 |6610E470
再点F9,读取[EBFAEAFA]异常
代码为:OR ESI,DWORD PTR DS:[EDX+EBFAEAFA]
下面显示:SEH链太长(是否递归?)然后退出了:(
不知何故,望高手指教…………等待ing
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课