|
|
|
如何将用汇编语言EAX内容作为字符串表示出来?
谢谢programfan,使用itoa,我终于达到我的需求了。 原程序是: … … 004012A9 |. E8 FC010000 CALL <JMP.&USER32.ShowWindow> ; \ShowWindow 004012AE EB 09 JMP SHORT CrackHea.004012B9 004012B0 3132 XOR DWORD PTR DS:[EDX],ESI 004012B2 333435 363636>XOR ESI,DWORD PTR DS:[ESI+363636] 004012B9 68 B0124000 PUSH CrackHea.004012B0 ; ASCII "12345666" 004012BE FF35 90314000 PUSH DWORD PTR DS:[403190] 004012C4 |. E8 DB010000 CALL <JMP.&USER32.SetWindowTextA> ; \SetWindowTextA 004012C9 |. EB 08 JMP SHORT CrackHea.004012D3 … … 我修改成: … … 004012A9 . E8 FC010000 CALL <JMP.&USER32.ShowWindow> ; \ShowWindow 004012AE . E9 2D020000 JMP CrackHea.004014E0 004012B3 90 NOP 004012B4 90 NOP 004012B5 90 NOP 004012B6 90 NOP 004012B7 90 NOP 004012B8 90 NOP 004012B9 > FF35 90314000 PUSH DWORD PTR DS:[403190] ; |hWnd = NULL 004012BF . 90 NOP ; | 004012C0 . 90 NOP ; | 004012C1 . 90 NOP ; | 004012C2 . 90 NOP ; | 004012C3 . 90 NOP ; | 004012C4 . E8 DB010000 CALL <JMP.&USER32.SetWindowTextA> ; \SetWindowTextA 004012C9 . EB 08 JMP SHORT CrackHea.004012D3 … … 004014E0 > \50 PUSH EAX 004014E1 . 53 PUSH EBX 004014E2 . 33C0 XOR EAX,EAX 004014E4 . 33DB XOR EBX,EBX 004014E6 . A1 9C334000 MOV EAX,DWORD PTR DS:[40339C] 004014EB . 35 53757A79 XOR EAX,797A7553 004014F0 . 8D1D C4334000 LEA EBX,DWORD PTR DS:[4033C4] 004014F6 . 6A 0A PUSH 0A ; /radix = A (10.) 004014F8 . 53 PUSH EBX ; |string => CrackHea.004033C4 004014F9 . 50 PUSH EAX ; |value 004014FA . E8 95D4547C CALL ntdll._itoa ; \_itoa 004014FF . 5B POP EBX 00401500 . 5B POP EBX 00401501 . 5B POP EBX 00401502 . 5B POP EBX 00401503 . 58 POP EAX 00401504 . 68 C4334000 PUSH CrackHea.004033C4 00401509 .^ E9 ABFDFFFF JMP CrackHea.004012B9 … … 这样,就实现了将注册码直接显示到文本框中! 这里: 004014E6 . A1 9C334000 MOV EAX,DWORD PTR DS:[40339C] 将机器生成的机器码,暂且叫机器码,因其与或797A7553后的十进制数即为注册码。 004014EB . 35 53757A79 XOR EAX,797A7553 EAX此时为注册码,只需将其转换成十进制字符串 004014F0 . 8D1D C4334000 LEA EBX,DWORD PTR DS:[4033C4] 建立缓冲区 004014F6 . 6A 0A PUSH 0A ; /radix = A (10.) 004014F8 . 53 PUSH EBX ; |string => CrackHea.004033C4 004014F9 . 50 PUSH EAX ; |value 004014FA . E8 95D4547C CALL ntdll._itoa ; \_itoa 调用itoa函数,将EAX转换成进制为10的字符串,放到EBX处去。 004014FF . 5B POP EBX 00401500 . 5B POP EBX 00401501 . 5B POP EBX 以上为平衡堆栈,我汇编不好,不会用更好的方法,就笨招数OD的堆栈窗口中堆栈的元素个数一直平衡到push ebx为止,我这里有疑问,为什么CALL ntdll._itoa不能平衡堆栈呢?是不是所有的Windows函数(像CALL <JMP.&USER32.SetWindowTextA>)都是这样的呢? 00401502 . 5B POP EBX 00401503 . 58 POP EAX 00401504 . 68 C4334000 PUSH CrackHea.004033C4 OK了! 后面的就和修改前差不多了。 00401504 . 68 C4334000 PUSH CrackHea.004033C4 内容 004012B9 > /FF35 90314000 PUSH DWORD PTR DS:[403190] 句柄 004012C4 . E8 DB010000 CALL <JMP.&USER32.SetWindowTextA> ; \SetWindowTextA 通过programfan的提示后,我开始修改的文件总是出错,但是重新加载后有可运行,但是运行不到最后,我找了半天,才发现是堆栈没有平衡好,导致的错误。 再次谢谢programfan,还有其他回帖的朋友。 上传下结果,显摆一下。 CrackHead0.rar |
|
如何将用汇编语言EAX内容作为字符串表示出来?
我也是这么想的,如何将"2162142881"写入00区,如何转换成"2162142881"呢?请问! |
|
如何将用汇编语言EAX内容作为字符串表示出来?
itoa好像是C中的吧。如果在汇编语言下呢? |
|
|
|
|
|
如何在短时间内提高主机权限并且不被发现
先说说这是什么样的主机啊。什么系统呢? |
|
|
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值