S.l.e!ep.¢%

像打了激速一样,以四倍的速度运转,开心的工作
简单、开放、平等的公司文化;尊重个性、自由与个人价值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

OllyDBG 之旅 (三)

Posted on 2009-09-20 23:53 S.l.e!ep.¢% 阅读(333) 评论(0)  编辑 收藏 引用 所属分类: Crack

在所有的 GetWindowText 设置断点
Ctrl + F2 重新开始

00401323  |.  E8 4C010000   call    <jmp.&USER32.GetWindowTextA>     ; \GetWindowTextA
00401328  |.  E8 A5000000   call    004013D2                                             <--- 执行完这个之后,结果就放到 esi,
0040132D  |.  3BC6          cmp     eax, esi                                                     <--- 然后跟 eax 进行比较
0040132F  |.  75 42         jnz     short 00401373
00401331  |.  EB 2C         jmp     short 0040135F

相关的汇编指令:
CMP
功能: 比较OP1与OP2的值
语法: CMP r/m,r/m/data
标志位: C,P,A,Z,O
 
Z == 0 ,则认为这两个数相等

JNZ

JNZ 就是zf标志不为1转移

汇编语言标志寄存器标志位说明

标志 名称 值为1的标志 值为0的标志 说明
OF Overflow Flag OV(OVERFLOW) NV(NOT OVERFLOW) ALU是否溢出标志
SF Sign Flag NG(NEGTIVE) PL(PLUS) 是否结果为负标志
(该标志的值总是ALU运算后最高位的结果保持一致)
ZF Zero Flag ZR(ZERO) NZ(NOT ZERO) 是否结果为0标志
PF Parity Flag PE(PARITY EVEN) PO(PARITY ODD) ALU结果中1的个数的奇偶位
(确切地说是ALU的低八位中1的个数)
CF Carry Flag CY(CARRIED) NC(NOT CARRIED) 是否借位或进位标志
DF Direction Flag DN(DOWN) UP(UP) 方向标志,若值为1则数据串指令从高地址向低地址方向步进
TF Trap Flag     值为1的时候每执行一次指令便产生一条内中断指令
IF Interupt Flag     值为1的时候CPU可响应可屏蔽中断指令
AF Auxiliary Carry Flag     加、减算术指令执行后,最低4位D 3 ~ D 0位有进位或借位,AF=1;无进位或借位,AF=0。该标志用于系统进行BCD码的算术运算结果的调整

00401323  |.  E8 4C010000   call    <jmp.&USER32.GetWindowTextA>     ; \GetWindowTextA
00401328  |.  E8 A5000000   call    004013D2                                             <--- 执行完这个之后,结果就放到 esi,
0040132D  |.  3BC6          cmp     eax, esi                                                     <--- 然后跟 eax 进行比较
0040132F  |.  75 42         jnz     short 00401373                                            <--- 肯定有地方修改了A这个标志位
00401331  |.  EB 2C         jmp     short 0040135F

Ctrl + F2 再来一次,00401328  |.  E8 A5000000   call    004013D2     F7跟进去

004013D2  /$  56            push    esi                                           <--- 因为这个 function 要修改到 esi ,所以先保存 esi 的值,最后一定会 pop esi
004013D3  |.  33C0          xor     eax, eax                                          清 eax 的值
004013D5  |.  8D35 C4334000 lea     esi, dword ptr [4033C4]          LEA 装入有效地址.  例: LEA DX,string ;把偏移地址存到DX.
004013DB  |.  33C9          xor     ecx, ecx                                          清 ecx
004013DD  |.  33D2          xor     edx, edx                                         清 edx
004013DF  |.  8A06          mov     al, byte ptr [esi]                            
004013E1  |.  46            inc     esi
004013E2  |.  3C 2D         cmp     al, 2D
004013E4  |.  75 08         jnz     short 004013EE
004013E6  |.  BA FFFFFFFF   mov     edx, -1
004013EB  |.  8A06          mov     al, byte ptr [esi]
004013ED  |.  46            inc     esi
004013EE  |>  EB 0B         jmp     short 004013FB
004013F0  |>  2C 30         /sub     al, 30

 


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理