编辑“︁
虚拟机分析
”︁(章节)
跳转到导航
跳转到搜索
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
== 获取用户输入 == 那么我们就可以从这里入手. 程序想获取用户输入, 需要调用的一个API是<code>GetDlgItemTextA()</code> <syntaxhighlight lang="c">UINT GetDlgItemTextA( HWND hDlg, int nIDDlgItem, LPSTR lpString, int cchMax );</syntaxhighlight> 获取的输入字符串会保存在<code>lpString</code>里. 那么我们就可以打开IDA查找有交叉引用<code>GetDlgItemTextA()</code>的地方. <syntaxhighlight lang="asm">.text:00401142 push 0Ch ; cchMax .text:00401144 push offset inputName ; lpString .text:00401149 push 3F8h ; nIDDlgItem .text:0040114E push [ebp+hWnd] ; hDlg .text:00401151 call GetDlgItemTextA .text:00401156 push 0Ch ; cchMax .text:00401158 push offset inputKey ; lpString .text:0040115D push 3F9h ; nIDDlgItem .text:00401162 push [ebp+hWnd] ; hDlg .text:00401165 call GetDlgItemTextA .text:0040116A mov var_a, 0 .text:00401171 call process_input .text:00401176 jmp short locExit</syntaxhighlight> 如上, IDA只有这里调用过<code>GetDlgItemTextA</code>并且调用了两次分别获取<code>inputName</code>和<code>inputKey</code>. 随后初始化了一个变量为0, 因为还不明白这个变量的作用, 因此先重命名为<code>var_a</code>. 之后进行了一次函数调用并jmp跳转. 因为jmp跳转位置的代码是一些退出程序的代码, 因此我们可以断定上面的这个call, 是在调用处理用户输入的函数. 因此将jmp的位置重命名为<code>locExit</code>, 函数则重命名为<code>process_input</code>.
摘要:
请注意,所有对gamedev的贡献均可能会被其他贡献者编辑、修改或删除。如果您不希望您的文字作品被随意编辑,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源(详情请见
Gamedev:著作权
)。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
导航菜单
个人工具
未登录
讨论
贡献
创建账号
登录
命名空间
页面
讨论
不转换
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
查看
阅读
编辑
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息