首页
社区
课程
招聘
[求助]脱arm求教
发表于: 2006-10-4 20:40 3824

[求助]脱arm求教

2006-10-4 20:40
3824
【文章标题】: 脱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直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 417
活跃值: (475)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
2
可能00B74FCF   0F84 2F010000    JE 00B75104                  //修改为jmp,下he GetCurrentThreadId断点
处的修改被检测到.
解决方法:
跟随后找jmp,下断,断下后撤销修改.
2006-10-4 21:45
0
雪    币: 218
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢,试试先
2006-10-4 22:00
0
游客
登录 | 注册 方可回帖
返回
//