您的位置:首页 > 其它

ARC_xp_20160530

2016-05-30 15:01 393 查看
1、

申请内存的地方在哪里?忘了...(应该是用的 malloc)

2、

键盘上按下一个键,处理的函数为:(所在的模块 应该是“CEGUIIrrlichtRenderer.dll”)

003B465F      CC            INT3
003B4660  /$  53            PUSH EBX
003B4661  |.  56            PUSH ESI
003B4662  |.  57            PUSH EDI
003B4663  |.  8BF9          MOV EDI,ECX                              ;  ZC: ECX==[[[[[101649D4]+0C]+1C]+218]+58]
003B4665  |.  FF15 5CB03B00 CALL DWORD PTR DS:[<&CEGUIBase.?getSingl>;  CEGUIBas.?getSingleton@System@CEGUI@@SAAAV12@XZ
003B466B  |.  8BF0          MOV ESI,EAX                              ;  ZC: ESI==返回值==019FCAC0==[12F8BD8]
003B466D  |.  8B4424 10     MOV EAX,DWORD PTR SS:[ESP+10]            ;  ZC: 唯一参数,按键ASCII码
003B4671  |.  0FB64C38 18   MOVZX ECX,BYTE PTR DS:[EAX+EDI+18]
003B4676  |.  51            PUSH ECX
003B4677  |.  8BCE          MOV ECX,ESI
003B4679  |.  FF15 6CB03B00 CALL DWORD PTR DS:[<&CEGUIBase.?injectKe>;  CEGUIBas.?injectKeyDown@System@CEGUI@@QAE_NI@Z
003B467F  |.  0FB75424 14   MOVZX EDX,WORD PTR SS:[ESP+14]
003B4684  |.  52            PUSH EDX
003B4685  |.  8BCE          MOV ECX,ESI
003B4687  |.  8AD8          MOV BL,AL
003B4689  |.  FF15 68B03B00 CALL DWORD PTR DS:[<&CEGUIBase.?injectCh>;  CEGUIBas.?injectChar@System@CEGUI@@QAE_NI@Z
003B468F  |.  84C0          TEST AL,AL
003B4691  |.  75 0A         JNZ SHORT CEGUIIrr.003B469D
003B4693  |.  84DB          TEST BL,BL
003B4695  |.  75 06         JNZ SHORT CEGUIIrr.003B469D
003B4697  |.  5F            POP EDI
003B4698  |.  5E            POP ESI
003B4699  |.  5B            POP EBX
003B469A  |.  C2 1000       RETN 10
003B469D  |>  5F            POP EDI
003B469E  |.  5E            POP ESI
003B469F  |.  B0 01         MOV AL,1
003B46A1  |.  5B            POP EBX
003B46A2  \.  C2 1000       RETN 10
003B46A5      CC            INT3


  ZC: (1)、injectKeyDown函数 是用于处理 回车 等的按键;(2)、injectChar函数 是用于处理 字符按键。

  ZC: CE 找到对应输入文字内容的 2个缓冲区(CE修改2个缓冲区的内容,确定了 只有一个是用于发送信息的)

  ZC:   焦点处于输入框时,对上面的缓冲区设置OD内存写入断点,会断在 memcpy函数中

  2.1、injectChar 的代码:(所在的模块 应该是“CEGUIBase.dll”)

011B471F      CC            INT3
011B4720 >/$  6A FF         PUSH -1
011B4722  |.  68 A83E2301   PUSH CEGUIBas.01233EA8
011B4727  |.  64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
011B472D  |.  50            PUSH EAX
011B472E  |.  83EC 18       SUB ESP,18
011B4731  |.  56            PUSH ESI
011B4732  |.  A1 00892E01   MOV EAX,DWORD PTR DS:[12E8900]
011B4737  |.  33C4          XOR EAX,ESP
011B4739  |.  50            PUSH EAX
011B473A  |.  8D4424 20     LEA EAX,DWORD PTR SS:[ESP+20]
011B473E  |.  64:A3 0000000>MOV DWORD PTR FS:[0],EAX
011B4744  |.  8BF1          MOV ESI,ECX
011B4746  |.  8B4E 34       MOV ECX,DWORD PTR DS:[ESI+34]
011B4749  |.  85C9          TEST ECX,ECX
011B474B  |.  74 2A         JE SHORT CEGUIBas.011B4777
011B474D  |.  6A 00         PUSH 0
011B474F  |.  E8 4C940000   CALL CEGUIBas.?isVisible@Window@CEGUI@@Q>
011B4754  |.  84C0          TEST AL,AL
011B4756  |.  74 1F         JE SHORT CEGUIBas.011B4777
011B4758  |.  8B4E 38       MOV ECX,DWORD PTR DS:[ESI+38]
011B475B  |.  85C9          TEST ECX,ECX
011B475D  |.  75 0A         JNZ SHORT CEGUIBas.011B4769
011B475F  |.  8B4E 34       MOV ECX,DWORD PTR DS:[ESI+34]
011B4762  |.  E8 A9940000   CALL CEGUIBas.?getActiveChild@Window@CEG>  // ZC: 测试下来,缓冲区是这个对象的属性
011B4767  |.  EB 10         JMP SHORT CEGUIBas.011B4779
011B4769  |>  E8 A2940000   CALL CEGUIBas.?getActiveChild@Window@CEG>
011B476E  |.  85C0          TEST EAX,EAX
011B4770  |.  75 07         JNZ SHORT CEGUIBas.011B4779
011B4772  |.  8B46 38       MOV EAX,DWORD PTR DS:[ESI+38]
011B4775  |.  EB 02         JMP SHORT CEGUIBas.011B4779
011B4777  |>  33C0          XOR EAX,EAX
011B4779  |>  C74424 0C 000>MOV DWORD PTR SS:[ESP+C],0
011B4781  |.  894424 10     MOV DWORD PTR SS:[ESP+10],EAX
011B4785  |.  C74424 08 904>MOV DWORD PTR SS:[ESP+8],OFFSET CEGUIBas>
011B478D  |.  C74424 28 000>MOV DWORD PTR SS:[ESP+28],0
011B4795  |.  85C0          TEST EAX,EAX
011B4797  |.  75 15         JNZ SHORT CEGUIBas.011B47AE
011B4799  |.  32C0          XOR AL,AL
011B479B  |.  8B4C24 20     MOV ECX,DWORD PTR SS:[ESP+20]
011B479F  |.  64:890D 00000>MOV DWORD PTR FS:[0],ECX
011B47A6  |.  59            POP ECX
011B47A7  |.  5E            POP ESI
011B47A8  |.  83C4 24       ADD ESP,24
011B47AB  |.  C2 0400       RETN 4
011B47AE  |>  8B4C24 30     MOV ECX,DWORD PTR SS:[ESP+30]
011B47B2  |.  8B96 D4000000 MOV EDX,DWORD PTR DS:[ESI+D4]
011B47B8  |.  894C24 14     MOV DWORD PTR SS:[ESP+14],ECX
011B47BC  |.  895424 1C     MOV DWORD PTR SS:[ESP+1C],EDX
011B47C0  |.  8B10          MOV EDX,DWORD PTR DS:[EAX]
011B47C2  |.  8B92 C0000000 MOV EDX,DWORD PTR DS:[EDX+C0]
011B47C8  |.  8D4C24 08     LEA ECX,DWORD PTR SS:[ESP+8]
011B47CC  |.  51            PUSH ECX
011B47CD  |.  8BC8          MOV ECX,EAX
011B47CF  |.  FFD2          CALL EDX              ZC: here in
011B47D1  |.  837C24 0C 00  CMP DWORD PTR SS:[ESP+C],0
011B47D6  |.  0F95C0        SETNE AL
011B47D9  |.  8B4C24 20     MOV ECX,DWORD PTR SS:[ESP+20]
011B47DD  |.  64:890D 00000>MOV DWORD PTR FS:[0],ECX
011B47E4  |.  59            POP ECX
011B47E5  |.  5E            POP ESI
011B47E6  |.  83C4 24       ADD ESP,24
011B47E9  \.  C2 0400       RETN 4
011B47EC      CC            INT3


  2.2、memcpy前的操作:(所在的模块 应该是“CEGUIBase.dll”)

011148D9  |> \837E 04 20    CMP DWORD PTR DS:[ESI+4],20  // ZC: 对象属性 与0x20比较,<=0x20则跳转至ECX=ESI+14(注意是LEA);>0x20则ECX=[ESI+94]
011148DD  |.  76 08         JBE SHORT CEGUIBas.011148E7
011148DF  |.  8B8E 94000000 MOV ECX,DWORD PTR DS:[ESI+94]
011148E5  |.  EB 03         JMP SHORT CEGUIBas.011148EA
011148E7  |>  8D4E 14       LEA ECX,DWORD PTR DS:[ESI+14]  // ZC: 注意这里是LEA
011148EA  |>  50            PUSH EAX                                 ; /n
011148EB  |.  8D04AA        LEA EAX,DWORD PTR DS:[EDX+EBP*4]         ; |
011148EE  |.  50            PUSH EAX                                 ; |src
011148EF  |.  51            PUSH ECX                                 ; |dest
011148F0  |.  E8 79131100   CALL <JMP.&MSVCR100.memcpy>              ; \memcpy
011148F5  |.  83C4 0C       ADD ESP,0C    // ZC: 注意到貌似MSVCR100里面的函数都要在调用函数之后平衡堆栈(不像stdcall是在被调用函数里面平衡堆栈)


  ZC: 这里 对象中有2个缓冲区,一个是在 信息DWORD个数小于等于0x20时使用的,一个是 信息DWORD个数大于0x20时使用的(貌似这个缓冲区是动态申请的,应该是用的 malloc 但是没找到具体在哪里分配内存...)

3、

 CE 对应输入文字内容的 2个缓冲区 --> 定位 当发送消息时,操作缓冲区的汇编指令 --> 分析这些指令

4、几个 地址:

基址   0x101649D4  模块Irrlicht.dll              (XP中被加载到的地址:0x10001000) 偏移:0x001639D4  位于函数0x100E9410中[函数偏移0x000E8410]
基址   0x012F8BD8  模块CEGUIBase.dll             (XP中被加载到的地址:0x01111000) 偏移:0x001E7BD8  位于函数0x011B40B0中[函数偏移0x000A30B0]
函数地址 0x011BDC10  模块CEGUIBase.dll             (XP中被加载到的地址:0x01111000) 偏移:0x000ACC10  OD提示的函数名:“getActiveChild@Window”
函数地址 0x003B4660  模块CEGUIIrrlichtRenderer.dll (XP中被加载到的地址:0x003B1000) 偏移:0x00003660  OD提示的函数名:“”


5、
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: