OllyDebugger 如何使用通配符 32 位寄存器查找命令序列

逆向工程 ollydbg
2021-06-10 03:18:24

假设我想找到所有

MOV EAX, 1234h
MOV WORD PTR[EBP+ADDR], AX

但它不会总是EAXEBP+ADDR

我如何通配符搜索

MOV ???, 1234h
MOV WORD PTR[???+ADDR], ??

我试过

MOV ANY, 1234h
MOV WORD PTR[ANY+ADDR], ANY

MOV ?, 1234h
MOV WORD PTR[ANY+ADDR], ?

MOV r32, 1234h
MOV WORD PTR[r32+ADDR], r16

这些模式都不能在 Ollydebugger 中编译我该怎么做?(我想避免使用脚本来完成如此简单的任务。

下面的这个编译和工作,

MOV r32, 0x1234

但我如何将它与

MOV WORD PTR[r32+ADDR], r16
2个回答

ollydbg 1.10右键单击Search For All Sequences wildcard MOV R32 , CONST

calc.exe xp sp3 32 位虚拟机的结果

Found sequences
Address                    Disassembly                            Comment
01001004 <&ADVAPI32.RegQu  DD      ADVAPI32.RegQueryValueExA      (Initial CPU selection)
010019E5                   MOV     EDI, OFFSET calc.ghnoParNum    01014C08=OFFSET calc.ghnoParNum
010019EF                   MOV     EDI, OFFSET calc.ghnoPrecNum   01014C70=OFFSET calc.ghnoPrecNum
01001A6B                   MOV     EBX, calc.010012A0             UNICODE "intl"
01001D51                   MOV     ESI, 130
01001DDF                   MOV     EAX, OFFSET calc.szBlank       01014DA4=OFFSET calc.szBlank
01001DE6                   MOV     EAX, calc.01001264             UNICODE " M"
01001F51 calc.WinMain      MOV     EAX, calc.010128EE             10128EE=calc.010128EE
01001FED                   MOV     ESI, 400
010020A2                   MOV     EAX, calc.010020A8             010020A8=calc.010020A8
010020D5                   MOV     EAX, 80000000
0100210A                   MOV     EDI, OFFSET calc.szAppName     UNICODE "SciCalc"

组合外卡

MOV 字 PTR [R32+CONST] , R16

Found sequences
Address        Disassembly                                     Comment
01001F6E       MOV     WORD PTR SS:[EBP-FC], BX
01002234       MOV     WORD PTR DS:[EAX+EDX*2+14], DI
0100230D       MOV     WORD PTR DS:[ESI+EAX*2+14], DI
0100231C       MOV     WORD PTR DS:[ESI+EAX*2+A4], DI
01002358       MOV     WORD PTR SS:[EBP+EDI*2-108], AX
01002376       MOV     WORD PTR SS:[EBP+EDI*2-108], AX
01002470       MOV     WORD PTR DS:[ECX+EAX*2+C], BX
010024AF       MOV     WORD PTR DS:[ECX+ESI*2+C], BX
0100251D       MOV     WORD PTR DS:[EAX+ECX*2+14], DX
010025AA       MOV     WORD PTR DS:[ECX+EAX*2+14], DX
0100404D       MOV     WORD PTR SS:[EBP+EAX*2-74], BX
010056E0       MOV     WORD PTR SS:[EBP+8], AX
010056F4       MOV     WORD PTR SS:[EBP+A], BX
01012475 calc  PUSH    70                              (Initial CPU selection)

编辑以解决评论

dont need the WORD ptr只需执行
mov [R32+CONST] ,R16
将获取相同的结果
ollydbgimplicitly knows R!6 means word ptr而不是 R16
如果您提供r32ollydbg 会将其解码为DWORD PTR

Found sequences, item 1
 Address=010017E7
 Disassembly=MOV     DWORD PTR SS:[EBP-2C], ESI

提供mov [CONST} , R8 然后你取回all BYTE PTR序列

Found sequences, item 1
 Address=0100AC75
 Disassembly=MOV     BYTE PTR DS:[ftrueinfinite], BL

没关系这行不通.. 它必须在两个区域中找到常​​量才能找到 WORD PTR.. 而事实并非如此。

我以不同的方式解决它并不真正需要命令序列,

所有常量的工作方式几乎相同(不过要查看的内容更多,并且都已排序,因此WORD PTR如果这是我正在寻找的内容,我会看到它下方右侧。

1
2
3