吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 781|回复: 17
收起左侧

[求助] 下面这段初始化汇编代码要如何转换为c++

[复制链接]
zhuayi112 发表于 2024-1-25 21:07
本帖最后由 zhuayi112 于 2024-1-25 22:27 编辑
[Asm] 纯文本查看 复制代码
push    ebp
mov     ebp,esp
mov     eax,0x1004
call    00584BC0
mov     eax,dword ptr ds:[0x6571B0]                       ;  eax = FF653105
xor     eax,ebp                                           ;  ebp = 0012DAD8
mov     dword ptr ss:[ebp-0x4],eax
push    esi
push    edi
mov     dword ptr ss:[ebp-0x1004],0xC5D1B023
mov     dword ptr ss:[ebp-0x1000],0x286085F0
mov     dword ptr ss:[ebp-0xFFC],0xCA417918
.
.
dword ptr ds:[ecx],0x243F6A88
dword ptr ds:[ecx+0x4],0x85A308D3
dword ptr ds:[ecx+0x8],0x13198A2E
dword ptr ds:[ecx+0xC],0x3707344
dword ptr ds:[ecx+0x10],0xA4093822
dword ptr ds:[ecx+0x14],0x299F31D0
dword ptr ds:[ecx+0x18],0x82EFA98
dword ptr ds:[ecx+0x1C],0xEC4E6C89
dword ptr ds:[ecx+0x20],0x452821E6
dword ptr ds:[ecx+0x24],0x38D01377
dword ptr ds:[ecx+0x28],0xBE5466CF
dword ptr ds:[ecx+0x2C],0x34E90C6C
dword ptr ds:[ecx+0x30],0xC0AC29B7
dword ptr ds:[ecx+0x34],0xC97C50DD
dword ptr ds:[ecx+0x38],0x3F84D5B5
dword ptr ds:[ecx+0x3C],0xB5470917
dword ptr ds:[ecx+0x40],0x9216D5D9
mov     dword ptr ds:[ecx+0x44],0x8979FB1B
lea     edi,dword ptr ds:[ecx+0x48]
mov     ecx,0x400
lea     esi,dword ptr ss:[ebp-0x1004]
mov     dword ptr ss:[ebp-0xDC],0xF2D519FF
mov     dword ptr ss:[ebp-0x8],0x4CF9AA7E
rep     movs dword ptr es:[edi],dword ptr ds:[esi]
mov     ecx,dword ptr ss:[ebp-0x4]
pop     edi
xor     ecx,ebp
pop     esi

上面的汇编代码是初始化一个局部变量 0x1004 吗?中间 dword ptr ds:[ecx],0x243F6A88 .....一串的初始化有点不是很明白,还有最后 rep     movs dword ptr es:[edi],dword ptr ds:[esi] 这段。有汇编熟手能帮解释下吗?谢谢了!

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

头像被屏蔽
月之点点 发表于 2024-1-26 10:50
提示: 作者被禁止或删除 内容自动屏蔽
gunxsword 发表于 2024-1-26 09:40
本帖最后由 gunxsword 于 2024-1-26 09:52 编辑

你这一大堆代码,说白了就是在初始化一个数组

push    ebp
mov     ebp,esp
mov     eax,0x1004  //EAX可能是参数
call    00584BC0 //正常返回值应该是放在EAX中,但是下面给EAX重新赋值,也没有使用EAX,要么处理过,要么就是没有返回值
mov     eax,dword ptr ds:[0x6571B0]                      ;  eax = FF653105
xor     eax,ebp                                          ;  ebp = 0012DAD8
mov     dword ptr ss:[ebp-0x4],eax
push    esi
push    edi
mov     dword ptr ss:[ebp-0x1004],0xC5D1B023  //这三个算是局部变量,后面可能用到
mov     dword ptr ss:[ebp-0x1000],0x286085F0
mov     dword ptr ss:[ebp-0xFFC],0xCA417918
.
.
dword ptr ds:[ecx],0x243F6A88  //这里开始相当于对ECX指向的数组开始赋值数据,+4,就是下一个,+8再下一个,a[0],a[1]  这前面应该有MOV,不可能没有
dword ptr ds:[ecx+0x4],0x85A308D3
dword ptr ds:[ecx+0x8],0x13198A2E
dword ptr ds:[ecx+0xC],0x3707344
dword ptr ds:[ecx+0x10],0xA4093822
dword ptr ds:[ecx+0x14],0x299F31D0
dword ptr ds:[ecx+0x18],0x82EFA98
dword ptr ds:[ecx+0x1C],0xEC4E6C89
dword ptr ds:[ecx+0x20],0x452821E6
dword ptr ds:[ecx+0x24],0x38D01377
dword ptr ds:[ecx+0x28],0xBE5466CF
dword ptr ds:[ecx+0x2C],0x34E90C6C
dword ptr ds:[ecx+0x30],0xC0AC29B7
dword ptr ds:[ecx+0x34],0xC97C50DD
dword ptr ds:[ecx+0x38],0x3F84D5B5
dword ptr ds:[ecx+0x3C],0xB5470917
dword ptr ds:[ecx+0x40],0x9216D5D9
mov     dword ptr ds:[ecx+0x44],0x8979FB1B到这里,直接赋值结束
lea     edi,dword ptr ds:[ecx+0x48] 这里计算了下一个下标的值放到了EDI
mov     ecx,0x400  循环,0X400次,计数 //这里是相当于循环,是一次就执行完的
lea     esi,dword ptr ss:[ebp-0x1004] //这里是取得了EBP-0X1004的地址,不是里面的数据
mov     dword ptr ss:[ebp-0xDC],0xF2D519FF
mov     dword ptr ss:[ebp-0x8],0x4CF9AA7E
rep     movs dword ptr es:[edi],dword ptr ds:[esi]  //这句的意思就是把ESI指向的地址的数据,按着,4字节一个,一共,0X400次,写入到EDI指向的地址,说白了就是继续给前面的数组,增加,0X400个数据
mov     ecx,dword ptr ss:[ebp-0x4]
pop     edi
xor     ecx,ebp
pop     esi


前面是,0x44 0x44/4=0x11 =17 0-17 共,18个,再加上,0x400一共是,0x411个数据,整段代码,就是为了初始化一个0X411的数组,看数据,可能是个KEY表之类的东西!
5598869 发表于 2024-1-25 21:20
我这个半吊子 看着应该不容易 转为 C++ 好多地址数据 没法弄吧。
xlhwxyh 发表于 2024-1-25 21:40
本帖最后由 xlhwxyh 于 2024-1-25 21:44 编辑

直接用c++内联汇编不是更好吗?大致就是将
地址复制
p[0] = ...;
p[1] = ...;
懒得打字了,你懂滴吧!
xlhwxyh 发表于 2024-1-25 21:47
dword ptr ds:[ecx],0x243F6A88                        //p[0] = 0x243F6A88;
dword ptr ds:[ecx+0x4],0x85A308D3              //p[1] = 0x85A308D3;
dword ptr ds:[ecx+0x8],0x13198A2E             //p[2] = 0x13198A2E;
dword ptr ds:[ecx+0xC],0x3707344              //p[3] = 0x3707344 ;
.......
ecx 看来源因该是个数组!不懂就用内联汇编
KaneHiroshi 发表于 2024-1-25 22:01
如果汇编能直接转成c++那还要汇编干什么呢?C++再怎么说也是“高级”语言嘛
 楼主| zhuayi112 发表于 2024-1-25 22:27
rep     movs dword ptr es:[edi],dword ptr ds:[esi] 这点不明白了
BY丶显示 发表于 2024-1-26 00:50
不如直接,__asm{}调用一样。替换地址成变量。
MSLOS 发表于 2024-1-26 02:10
把汇编代码复制粘贴到chatgpt然后说把这段汇编代码转换成c++
苏紫方璇 发表于 2024-1-26 03:07
最简单的,扔ida里f5一下就自动转了,不过可能需要手动修改润色润色
alongzhenggang 发表于 2024-1-26 08:08
学习经验丰富自己
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-22 03:07

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表