首页
社区
课程
招聘
[原创]逆向SetDlgItemText 分析 CALL 的妙用
发表于: 2009-2-4 16:16 3558

[原创]逆向SetDlgItemText 分析 CALL 的妙用

2009-2-4 16:16
3558
77D5B9D9 >    8BFF                 MOV EDI,EDI
77D5B9DB  /.  55                   PUSH EBP
77D5B9DC  |.  8BEC                 MOV EBP,ESP
77D5B9DE  |.  83EC 28              SUB ESP,28
77D5B9E1  |.  837D 14 00           CMP DWORD PTR SS:[EBP+14],0
77D5B9E5  |.  A1 B801D777          MOV EAX,DWORD PTR DS:[77D701B8]
77D5B9EA  |.  8945 FC              MOV DWORD PTR SS:[EBP-4],EAX
77D5B9ED  |.  8D45 DC              LEA EAX,DWORD PTR SS:[EBP-24]
77D5B9F0  |.  57                   PUSH EDI
77D5B9F1  |.  8B7D 08              MOV EDI,DWORD PTR SS:[EBP+8]
77D5B9F4  |.  8945 D8              MOV DWORD PTR SS:[EBP-28],EAX
77D5B9F7  |.  8B45 10              MOV EAX,DWORD PTR SS:[EBP+10]
77D5B9FA  |.  74 14                JE SHORT user32.77D5BA10
77D5B9FC  |.  85C0                 TEST EAX,EAX
77D5B9FE  |.  7D 2B                JGE SHORT user32.77D5BA2B
77D5BA00  |.  8D4D DE              LEA ECX,DWORD PTR SS:[EBP-22]
77D5BA03  |.  66:C745 DC 2D00      MOV WORD PTR SS:[EBP-24],2D
77D5BA09  |.  894D D8              MOV DWORD PTR SS:[EBP-28],ECX
77D5BA0C  |.  F7D8                 NEG EAX
77D5BA0E  |.  EB 1B                JMP SHORT user32.77D5BA2B
77D5BA10  |>  85C0                 TEST EAX,EAX
77D5BA12  |.  79 17                JNS SHORT user32.77D5BA2B
77D5BA14  |.  56                   PUSH ESI                                 ;  定时器实.00401000
77D5BA15  |.  6A 0A                PUSH 0A
77D5BA17  |.  59                   POP ECX                                  ;  定时器实.00401037
77D5BA18  |.  33D2                 XOR EDX,EDX
77D5BA1A  |.  F7F1                 DIV ECX
77D5BA1C  |.  8D4D D8              LEA ECX,DWORD PTR SS:[EBP-28]
77D5BA1F  |.  51                   PUSH ECX                                 ; /Arg2 = 0000D2F4
77D5BA20  |.  50                   PUSH EAX                                 ; |Arg1 = 00001413
77D5BA21  |.  8BF2                 MOV ESI,EDX                              ; |
77D5BA23  |.  E8 78FFFFFF          CALL user32.77D5B9A0                     ; \user32.77D5B9A0
77D5BA28  |.  8BC6                 MOV EAX,ESI                              ;  定时器实.00401000
77D5BA2A  |.  5E                   POP ESI                                  ;  定时器实.00401037
77D5BA2B  |>  8D4D D8              LEA ECX,DWORD PTR SS:[EBP-28]
77D5BA2E  |.  51                   PUSH ECX                                 ; /Arg2 = 0000D2F4
77D5BA2F  |.  50                   PUSH EAX                                 ; |Arg1 = 00001413
77D5BA30  |.  E8 6BFFFFFF          CALL user32.77D5B9A0                     ; \这个是算法CALL 跟进去表演开始77D5BA35  |.  8B45 D8              MOV EAX,DWORD PTR SS:[EBP-28]
77D5BA38  |.  66:8320 00           AND WORD PTR DS:[EAX],0
77D5BA3C  |.  8D45 DC              LEA EAX,DWORD PTR SS:[EBP-24]
77D5BA3F  |.  50                   PUSH EAX                                 ; /Text = 00001413 ???
77D5BA40  |.  FF75 0C              PUSH DWORD PTR SS:[EBP+C]                ; |ControlID = 113 (275.)
77D5BA43  |.  57                   PUSH EDI                                 ; |hWnd = 0012FE68
77D5BA44  |.  E8 E997FCFF          CALL user32.SetDlgItemTextW              ; \SetDlgItemTextW
77D5BA49  |.  8B4D FC              MOV ECX,DWORD PTR SS:[EBP-4]
77D5BA4C  |.  5F                   POP EDI                                  ;  定时器实.00401037
77D5BA4D  |.  E8 22CCFBFF          CALL user32.77D18674
77D5BA52  |.  C9                   LEAVE
77D5BA53  \.  C2 1000              RETN 10

77D5B9A0  /$  8BFF                 MOV EDI,EDI                              ;  这里实现函数转换数据的功能
77D5B9A2  |.  55                   PUSH EBP
77D5B9A3  |.  8BEC                 MOV EBP,ESP                              ;  ESP 指向堆栈
77D5B9A5  |.  8B45 08              MOV EAX,DWORD PTR SS:[EBP+8]             ;  这里 是原来的 数字 16 进制数
77D5B9A8  |.  83F8 0A              CMP EAX,0A                               ;  比较 eax 大于 A 不 不大于直接执行 + 30
77D5B9AB  |.  56                   PUSH ESI                                 ;  貌似 保存 esi 的值
77D5B9AC  |.  8B75 0C              MOV ESI,DWORD PTR SS:[EBP+C]             ;  调用本程序 CALL 的参数 ecx
77D5B9AF  |.  7C 13                JL SHORT user32.77D5B9C4
77D5B9B1  |.  57                   PUSH EDI                                 ;  这里吧余数保存到 堆栈
77D5B9B2  |.  6A 0A                PUSH 0A                                  ;  算法
77D5B9B4  |.  59                   POP ECX
77D5B9B5  |.  99                   CDQ
77D5B9B6  |.  F7F9                 IDIV ECX
77D5B9B8  |.  56                   PUSH ESI                                 ; /ebp + c
77D5B9B9  |.  50                   PUSH EAX                                 ; |这里压入 eax 当成参数
77D5B9BA  |.  8BFA                 MOV EDI,EDX                              ; |EDX 为余数 吧 余数给 EDI
77D5B9BC  |.  E8 DFFFFFFF          CALL user32.77D5B9A0                     ; \这个CALL 帅呆了 CALL 指令 自动 保存下一个地址到堆栈77D5B9C1  |.  8BC7                 MOV EAX,EDI                              ;  这里吧 余数给EAX 执行下面的计算
77D5B9C3  |.  5F                   POP EDI                                  ;  从堆栈取出 余数
77D5B9C4  |>  8B0E                 MOV ECX,DWORD PTR DS:[ESI]
77D5B9C6  |.  83C0 30              ADD EAX,30                               ;  + 30H 变成 对应的 ASCII  第一次从 JL 跳过来
77D5B9C9  |.  66:8901              MOV WORD PTR DS:[ECX],AX                 ;  保存
77D5B9CC  |.  8306 02              ADD DWORD PTR DS:[ESI],2                 ;  地址双字增加
77D5B9CF  |.  5E                   POP ESI                                  ;  这里的 POP 平衡 堆栈 第一次执行  刚好 执行到 CALL保存的堆栈  返回到 77D5B9C1
77D5B9D0  |.  5D                   POP EBP
77D5B9D1  \.  C2 0800              RETN 8         ; 处理到 他上面 CALL 的次数 刚好 堆栈平衡 返回

这里用 堆栈做循环 返回 用的 秒极了      我刚开始 逆向这个的时候 就纳闷 他为什么用CALL 而不是 JMP 做这个循环 。。。。

跟了下 发现 他这个CALL 用的 很疯狂

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 357
活跃值: (3398)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
2
如果一直循环,会导致堆栈不够用
2009-2-4 16:27
0
雪    币: 416
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
微软 很机智的 在那个 调用 算法 CALL 前 做了数据大小判断
2009-2-4 16:29
0
雪    币: 416
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
发错了 应该是 这个函数 SetDlgItemInt  
2009-2-4 16:37
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
5
“递归”而已。没什么妙用之说,“栈”结构的基本用途之一。
2009-2-4 19:11
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
6
有兴趣的话LZ可以找些数据结构的书来看看
2009-2-4 21:45
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
学习了,感謝分享~~~~~
2009-2-6 15:46
0
游客
登录 | 注册 方可回帖
返回
//