mov eax, dword ptr [esi]指令区别

mov eax,esi 

将esi中的数据传送到eax中


mov eax,[esi] 

esi中是地址,将内存中该地址的数据传送到eax中,也就是间接寻址


mov eax, dword ptr [esi] 

dword表示的是双字,四字节。esi中保存的是为内存中的地址。将该地址处的4字节数据传送到eax中。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,查壳,使用PEID或者是FI,为UPX v1.08 接下来用OD载入,提示为“压缩代码是否继续分析”,我们选择否 我在这里介绍几种方法,请看我的操作。 方法1:单步跟踪(最常见的方法) 0040E8C0 N> 60 pushad //停在这里了,我们F8单步 0040E8C1 BE 15B04000 mov esi,NOTEPAD.0040B015 0040E8C6 8DBE EB5FFFFF lea edi,dword ptr ds:[esi+FFFF> 0040E8CC 57 push edi 0040E8CD 83CD FF or ebp,FFFFFFFF 0040E8D0 EB 10 jmp short NOTEPAD.0040E8E2 //跳 。。。。。。。。。。 0040E8E2 8B1E mov ebx,dword ptr ds:[esi] //跳到这里,继续单步 0040E8E4 83EE FC sub esi,-4 0040E8E7 11DB adc ebx,ebx 0040E8E9 ^ 72 ED jb short NOTEPAD.0040E8D8 //这里要往回跳了 0040E8EB B8 01000000 mov eax,1 //F4,然后继续F8 0040E8F0 01DB add ebx,ebx 0040E8F2 75 07 jnz short NOTEPAD.0040E8FB //跳 。。。。。。。。。。。 0040E8FB 11C0 adc eax,eax //来到这里,F8继续 0040E8FD 01DB add ebx,ebx 0040E8FD 01DB add ebx,ebx 0040E8FF ^ 73 EF jnb short NOTEPAD.0040E8F0 0040E901 75 09 jnz short NOTEPAD.0040E90C //跳 。。。。。。。。。。。 0040E90C 31C9 xor ecx,ecx //跳到这里,继续F8 0040E90E 83E8 03 sub eax,3 0040E90E 83E8 03 sub eax,3 0040E911 72 0D jb short NOTEPAD.0040E920 //跳 。。。。。。。。。。。 0040E920 01DB add ebx,ebx //跳到这里,继续F8 0040E922 75 07 jnz short NOTEPAD.0040E92B //跳 。。。。。。。。。。。 0040E92B 11C9 adc ecx,ecx //跳到了这里,继续F8 0040E92D 01DB add ebx,ebx 0040E92F 75 07 jnz short NOTEPAD.0040E938 //跳 。。。。。。。。。。。 0040E938 11C9 adc ecx,ecx //跳到这里,继续F8 0040E93A 75 20 jnz short NOTEPAD.0040E95C //跳 。。。。。。。。。。。 0040E95C 81FD 00F3FFFF cmp ebp,-0D00 //来到这,继续F8 0040E962 83D1 01 adc ecx,1 0040E965 8D142F lea edx,dword ptr ds:[edi+ebp] 0040E968 83FD FC
HOOK征途实现拦截系统公告 语音视频下载地址 http://115.com/file/cly4tyga .版本 2 .子程序 _窗口1_创建完毕 .局部变量 tmp, 整数型 窗口1.标题 = 取执行文件名 () Process = GetCurrentProcessId () ' 004A31D7 E8 F4D30700 CALL zhengtu.005205D0 游戏公告显示的call地址 原始数据 = 读整型内存 (Process, 4862424) ' 读取E8 后面的call地址机器码 E8占一个字节 所以读取我们加上1(就是004A31D7+1) 也就是 005205D0 这个机器码 hook函数地址 = 到整数 (&hook;) ' 取出hook这个子程序的地址 tmp = hook函数地址 + 4 ' hook子程序地址 + 4 ' '''''''''''''''''''''''''''''''''解释下为什么加4 ' '''''这个是hook子程序原型 ' 008715D7 >/$ 56 PUSH ESI hook 子程序地址 ' 008715D8 |. 57 PUSH EDI ' 008715D9 |. 53 PUSH EBX ' 008715DA |. E8 09FBFFFF CALL ye_cat.008710E8 +4 来到 E8(008715D7+4),把E8不算进去 这里读取到这个call的机器码之后 下面换算出这个call地址(008710E8) ' 008715DF |. 5B POP EBX ' 008715E0 |. 5F POP EDI ' 008715E1 |. 5E POP ESI ' 008715E2 \. C3 RETN ' '''''''''''''''''''''''''''''''''''''''''''''''''call 008710e8 内部代码 也就是hook这个子程序的核心 ' 008710E8 /$ 55 PUSH EBP 'hook这个call的开始,系统自动分配了堆栈 ' 008710E9 |. 8BEC MOV EBP,ESP ' 008710EB |. 81EC 08000000 SUB ESP,8 ' 008710F1 |. C745 FC 00000>MOV DWORD PTR SS:[EBP-4],0 ' 008710F8 |. 53 PUSH EBX '这个是我们用内联写的(我们要让游戏里面公告的call直接call我们这个地址(call 008710F8)) 游戏里面原来call内部代码就是这样子的(游戏call内部代码我也贴出来了 在底下) ' 008710F9 |. 8B9C24 080000>MOV EBX,DWORD PTR SS:[ESP+8] '存放公告内容的地址 ' 00871100 |. 55 PUSH EBP ' 00871101 |. 56 PUSH ESI ' 00871102 |. 57 PUSH EDI ' 00871103 |. 899D FCFFFFFF MOV DWORD PTR SS:[EBP-4],EBX ‘传给我们申请的局部变量([ebp-4]表示第一个局部变量) Str ' 00871109 |. 68 808A8D00 PUSH ye_cat.008D8A80 ; ASCII "\r\n" ' 0087110E |. FF75 FC PUSH DWORD PTR SS:[EBP-4] ' 00871111 |. B9 02000000 MOV ECX,2 ' 00871116 |. E8 71FFFFFF CALL ye_cat.0087108C ' 0087111B |. 83C4 08 ADD ESP,8 ' 0087111E |. 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX ' 00871121 |. 68 04000080 PUSH 80000004 ' 00871126 |. 6A 00 PUSH 0 ' 00871128 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] ' 0087112B |. 85C0 TEST EAX,EAX ' 0087112D |. 75 05 JNZ SHORT ye_cat.00871134 ' 0087112F |. B8 838A8D00 MOV EAX,ye_cat.008D8A83 ' 00871134 |> 50 PUSH EAX ' 00871135 |. 68 05000100 PUSH 10005 ' 0087113A |. 68 09000116 PUSH 16010009 ' 0087113F |. 68 06000152 PUSH 52010006 ' 00871144 |. 68 02000000 PUSH 2 ' 00871149 |. BB D0198700 MOV EBX,ye_cat.008719D0 ' 0087114E |. E8 DF040000 CALL ye_cat.00871632 ' 00871153 |. 83C4 1C ADD ESP,1C ' 00871156 |. 8B5D F8 MOV EBX,DWORD PTR SS:[EBP-8] ' 00871159 |. 85DB TEST EBX,EBX ' 0087115B |. 74 09 JE SHORT ye_cat.00871166 ' 0087115D |. 53 PUSH EBX ' 0087115E |. E8 D5040000 CALL ye_cat.00871638 ' 00871163 |. 83C4 04 ADD ESP,4 ' 00871166 |> 5F POP EDI ' 00871167 |. 5E POP ESI ' 00871168 |. 5D POP EBP ' 00871169 |. 5B POP EBX ' 0087116A \. C2 1400 RETN 14 //////////////////////////////////////////////////////////////// call目的地地址 = 读整型内存 (Process, tmp) call目的地地址 = call目的地地址 + tmp + 5 + 15 ' 取得hook子程序里面 push ebx 的内存地址 为了不出错所以和游戏里面一样 不能从hook这个子程序头部开始调用 所以我加上相应的偏移(18)得到 push ebx的地址 ' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' '''''''''游戏原来call的原型 ' 005205D0 /$ 53 PUSH EBX ' 005205D1 |. 8B5C24 08 MOV EBX,DWORD PTR SS:[ESP+8] ' 005205D5 |. 55 PUSH EBP ' 005205D6 |. 56 PUSH ESI ' 005205D7 |. 8B7424 14 MOV ESI,DWORD PTR SS:[ESP+14] ' 005205DB |. 83FE 03 CMP ESI,3 ' 005205DE |. 57 PUSH EDI ' 005205DF |. 8B7C24 1C MOV EDI,DWORD PTR SS:[ESP+1C] ' 005205E3 |. 8BE9 MOV EBP,ECX ' 005205E5 |. 74 05 JE SHORT zhengtu.005205EC ' 005205E7 |. 83FE 04 CMP ESI,4 ' 005205EA |. 75 11 JNZ SHORT zhengtu.005205FD ' 005205EC |> 8B0D 98B3CA00 MOV ECX,DWORD PTR DS:[CAB398] ' 005205F2 |. 85C9 TEST ECX,ECX ' 005205F4 |. 74 07 JE SHORT zhengtu.005205FD ' 005205F6 |. 57 PUSH EDI ' 005205F7 |. 53 PUSH EBX ' 005205F8 |. E8 43092000 CALL zhengtu.00720F40 ' 005205FD |> 8B4424 24 MOV EAX,DWORD PTR SS:[ESP+24] ' 00520601 |. 8B4C24 20 MOV ECX,DWORD PTR SS:[ESP+20] ' 00520605 |. 50 PUSH EAX ' 00520606 |. 51 PUSH ECX ' 00520607 |. 57 PUSH EDI ' 00520608 |. 56 PUSH ESI ' 00520609 |. 53 PUSH EBX ' 0052060A |. 8BCD MOV ECX,EBP ' 0052060C |. E8 CFF6FFFF CALL zhengtu.0051FCE0 ' 00520611 |. 5F POP EDI ' 00520612 |. 5E POP ESI ' 00520613 |. 5D POP EBP ' 00520614 |. 5B POP EBX ' 00520615 \. C2 1400 RETN 14 /这个call 5个参数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值