首页
社区
课程
招聘
请问有没有把delphi语句转为汇编语句的工具啊
发表于: 2006-11-28 17:41 4504

请问有没有把delphi语句转为汇编语句的工具啊

2006-11-28 17:41
4504
请问有没有把delphi语句转为汇编语句的工具啊?
用反汇编工具总是call转来转去的,一条简单的语句倒搞复杂了^_^
比如简单的一条 Sleep(8000) 语句,意思是让程序延时8秒钟后再执行。看反汇编语句是用call XXXXXX转来转去搞复杂了。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这一条 Sleep(8000) 语句用汇编怎么写语句?先谢谢了!

----我要让一个程序停几秒后才执行。
2006-11-28 17:45
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
Sleep() 是API函数.
2006-11-28 17:46
0
雪    币: 50161
活跃值: (20610)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
建议你用delphi或VC写几句指令,然后反汇编对比看。
2006-11-28 17:47
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢,我试过了,写了一条简单的 sleep(8000);反汇编弄出来太复杂了。我想看看真正的汇编语句是怎么样的?
就这条 sleep(8000)  汇编语句怎么表达达?
2006-11-28 18:09
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
在OD里看到的:
PUSH 1F40                     ; /Timeout = 8000. ms
CALL <JMP.&kernel32.Sleep>    ; \Sleep

是这个吧?
Sleep初值可以用PE查到,1F40是8000毫秒了吧?
2006-11-28 19:17
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我用OD的分析代码查到了:
push IF40 是8000毫秒
push 1000 是4096毫秒
......
应该是这样了!
2006-11-28 19:22
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
请坛主看看,全部完整的代码对不对?

MOV EAX,EAX
PUSH EBX
MOV EBX,EAX
PUSH 1F40     ; /Timeout = 8000. ms
CALL <JMP.&kernel32.Sleep>  ; \Sleep
2006-11-28 19:30
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
全部源代码:

0043E225     00             DB 00
0043E226     8BC0           MOV EAX,EAX
0043E228   . 68 401F0000    PUSH 1F40        ; /Timeout = 8000. ms
0043E22D   . E8 8E7EFCFF    CALL <JMP.&kernel32.Sleep>    ; \Sleep
0043E232   . C3             RETN
2006-11-28 19:36
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
终于改好了:
一定要改delphi程序的起始入口语句:Application.CreateForm(TForm1, Form1)的位置(这个位置是要打开主窗口),用dede找到它的jmp点地址,并记住这个值(复制)jmp xxxxxx,然后打开OD,从键盘上修改这个jmp,把它指向自己在一个空白地址上的第一个语句地址,比如是jmp 0043E228,从这里写下面的延时语句(可以预先写好放着):

0043E228   PUSH 1F40              ; /Timeout = 8000. ms
0043E22D   call dword ptr[503456] ; \Sleep
0043E22E:  jmp xxxxxx ;返回到原来的jmp值

保存文件,即可使程序按自己的意愿暂时挂起几秒钟后才继续执行^_^这样改造,对于那些开机就需要启动的网络登陆程序很有必要(否则容易发生网络登陆出错的窗口)
注:sleep的取值ThunkRVA要用PE去查找,找到后(比如是103456)再加基址400000,调用语句则为:call dword ptr[503456]

【本帖从不会到会,自我学习,结果供大家分享。本帖到此结束。】
2006-11-29 17:38
0
游客
登录 | 注册 方可回帖
返回
//