标签:
_text:00036DB5 push ebp __text:00036DB6 mov ebp, esp __text:00036DB8 push ebx __text:00036DB9 push edi __text:00036DBA push esi __text:00036DBB sub esp, 1Ch __text:00036DBE call $+5 __text:00036DC3 __text:00036DC3 loc_36DC3: ; DATA XREF: _IOHIDEventSystemClientDispatchEvent+1Cr __text:00036DC3 pop eax __text:00036DC4 mov ecx, [ebp+arg_4] __text:00036DC7 mov [esp+4], ecx __text:00036DCB __text:00036DCB loc_36DCB: ; DATA XREF: _IOHIDEventSystemClientDispatchEvent+61r __text:00036DCB mov eax, ds:(_kCFAllocatorDefault_ptr - 36DC3h)[eax] __text:00036DD1 mov esi, dword ptr ds:(loc_36DC3 - 36DC3h)[eax] __text:00036DD3 mov [esp], esi __text:00036DD6 call _IOHIDEventCreateData __text:00036DDB test eax, eax __text:00036DDD jz loc_36E8A __text:00036DE3 mov [esp+4], eax __text:00036DE7 mov [ebp+var_10], eax __text:00036DEA mov [esp], esi __text:00036DED call __IOHIDCreateBinaryData __text:00036DF2 mov edi, eax
1、call +$5 是常用的反静态汇编技巧,实际上就是CALL下一条指令,然后将返回地址pop 到eax 得到当前指令的地址。
2、__text:00036DCB mov eax, ds:(_kCFAllocatorDefault_ptr - 36DC3h)[eax],这条指令也有可能让人看不懂,下面结合指令来分析。
该条命令的字节码为:8B 80 49 12 04 00
__nl_symbol_ptr:0007800C _kCFAllocatorDefault_ptr dd offset
0x7800c - 0x36DC3 = 041249,可以知道041249 实际上是代码段到 _kCFAllocatorDefault_ptr 相对偏移,不管代码段加载到什么位置,总是能够定位到该函数指针。
__text:00037E16 mov eax, dword ptr ds:(loc_37DCB - 37DC3h)[eax]
00037E16 8B 40 08
结合指令 分析就是 mov eax,[eax + 8]
标签:
原文地址:http://www.cnblogs.com/famer/p/4207078.html