第二章:x64dbg编译后内部初探和文件夹结构的奥秘大曝光和简单的修改
本帖最后由 冥界3大法王 于 2021-11-13 17:30 编辑再回首:第一章:编译第一个属于你的x64dbg
https://static.52pojie.cn/static/image/hrline/2.gif
大家还记得上一集我们说的那个(1)(2)(3)安装QT的步奏吗?
就是这三个家伙,经过楼主的实测可以用TotalUninstall记录安装,导出注册表;并打包成7zip。下次再用时直接解包,导入注册表即可。
(打包后的大小是860M,老外的那个7ZIP不靠谱;因为里边缺了东西)
由于上面这些我们已经基本上用过了,简单的回顾下就行了。
.github目录: 提交问题发布代码相关的东西
bin目录:最终我们生成的产品在这目录里边(★)
deps目录: 执行批处理setupdeps.bat时从这个目录里复制过去的原始x32dbg/x64dbg相关目录和文件
help目录: 有一个md文件里边是下面的内容:
网络帮助:http://help.x64dbg.com
Github: https://github.com/x64dbg/docs
阅读文档: https://readthedocs.org/projects/x64dbg
hook目录:你执行install.bat时执行的初化始HOOK的相关文件
scr目录真正的源码都在这里头! (★)
build-x64dbg-x64-Release(编译过程中用到的临时目录)
build-x64dbg-x86-Release(编译过程中用到的临时目录)
我们执行x64dbg.sln(编译出x32dbg.exe、x32dbg.dll、x32bridge.dll)
具体看法王同学给绘的地图吧@-@{:301_997:}
https://static.52pojie.cn/static/image/hrline/2.gif
这些最重要的东西简单的交待完之后,大家是不是跃跃欲试打算搞点事情呢?
就像你小学写作文时一样:时间、地点、人物、事件、主谓宾定状补。
这里我们最关心的是:它是谁? 在哪里? 怎么改?
工具准备篇:
为了日后编辑修改访问方便
我在桌面上创建了快捷方式:C:\Qt\qtcreator-4.3.1\bin\qtcreator.exe C:\x64dbg_Compile_1\src\gui\x64dbg.pro
这样以后我只要双击就能马上编译出x32gui和x64gui.dll界面文件了。
文件夹也是同时,按着Ctrl+Shift+文件夹拖一个桌面上吧。
这些电脑基础操作就不用费话了吧?
接下来我准备了用于快速搜索文件名的软件Everything并设置了热键
用于搜索文件内容的软件TotalCommander、FileLocatorPro(前者支持多标签、后者支持下次打开时接茬看上次打开的,并能在右边预览)
用于写心得和记录的笔记软件My Notes Keeper这样万一以后想不起来了还能再回顾下想当年我是怎么改的
https://static.52pojie.cn/static/image/hrline/2.gif
要点说完,开始实战吧。
比如我们想把这个大蜘蛛图片改掉,那就先找到该图片,也就是上面截图的那个文件夹。但大小最好给人家的一样256*256 PNG的
不然可就走形了,或不好看了。
每次都需要用Qt Creator编译下
这样改其实也没啥意思,就是随便玩玩吧。
工具栏上的这些小图标,您是否看着满意?
不满意我们可以替换成别的,或让上面直接显示出文字来。
像下面这样:
先找到MainWindows.ui,双击进入
依图点击 ,就只有文字了。 其他几个呢?我们可以替换图标 或 干脆只要文字
因为图标的大小只有16*16,就算你费心PS修改,也是表现力不强的;不如改成字反而是一目了然。
接下来,我们修改Ctrl+G看到的信息
鼠标一点链接,直接输入地址,超级方便,而这功能只有新版本才出现,楼下你不知道吧? {:301_997:}
直接搜索找到,双击,加代码去修改吧。
void GotoDialog::expressionChanged(bool validExpression, bool validPointer, dsint value)
{
QString expression = ui->editExpression->text();
if(!expression.length())
{
QString tips[] = {"RVA", tr("File offset"), "PEB", "TEB"};
const char* expressions[] = {":$%", ":#%", "peb()", "teb()"};
QString labelText(tr("Shortcuts: "));
for(size_t i = 0; i < 4; i++)
修改后的代码:
void GotoDialog::expressionChanged(bool validExpression, bool validPointer, dsint value)
{
QString expression = ui->editExpression->text();
if(!expression.length())
{
QString tips[] = {"此处粘入相对虚拟地址(RVA)" , tr("此处粘入文件偏移地址(FOA)"), "peb()" , "teb()"};
const char* expressions[] = {":$%", ":#%", "peb()获取进程环境块地址", "teb()获取线程环境块地址"};
QString labelText(tr("快捷输入:"));
楼下,就这么简单的代码你看懂了不?
@不苦小和尚按下Ctrl+G,显示的地址上面,直接显示出VA、RVA、FOA地址;
这一功能我还没有研究明白如何改? 您来给我表演下;不要光动嘴。
https://static.52pojie.cn/static/image/hrline/2.gif
接下来,我们尝试添加一些比较实用的快捷键在程序内部实现(以往我都是直接在x64dbg.ini中来修改的)
就改三A地址复制的热键吧,这是我最不喜欢的之一
默认OD的复制VA地址热键是Ctrl+X
。。。。。。RVA。。。。。Ctrl+Shift+X
。。。。。。FOA。。。。。Shift+X
又简单,又好记!什么?法王的修改非主流? 法王的盲按速度秒你三条街。
故技重施,话不重复。我们把那三个照猫画虎修改吧
另外再把 转到下一帧、转到上一帧 给修改成Ctrl+Shift+Down和 Ctrl+Shift+Up 这样在堆栈窗口操作时就方便了。
热键设置硬件断点这种我还没研究透如何编?默认是没有的,并不代表不能有!
接下来还能修改控件的默认属性,
譬如
动动脑子吧,既然如此,那就证明是通过代码实现的!
我们就把它改成False吧。这次我们又成功了。通过简单的练习,我们得到了很多的启示。
同时也有很多新的挑战,例如上面提到的很多;还有下面的很多设想,还不知如何去改。。
下一节,从头开始学QT的开发,编写一个CrackMe程序起步热身吧。
先晚饭前存盘,你们都不要偷看哟~~
NOP是让你要修改的那行代码无效,不执行任何操作,软件读到这一行代码的时候就直接忽略,继续执行下一行。而跳转的问题跳不下去的问题,有可能是这个跳转上面还有个大跳转跳过这段代码。如果是执行到你要修改的那个跳转代码你跳不过的时候,你就把原来的代码(JE、JNE等)修改为JMP,JMP是无条件跳转,不管你上面判断的什么值,我都无条件跳转,而修改跳转就是在反汇编窗口看到的JE、JNE等用鼠标双击它,把JE、JNE等修改为JMP就可以了。 不苦小和尚 发表于 2021-11-13 13:20
没啥意义吧,修改增强一些功能才好
万丈高楼平地起,简单的还没有整明白呢。。。{:301_999:}
不得一步步来。。。
鄙视光动嘴不动手的{:301_995:} 送个👍 不明所以 已明惊人 好帖秒贴,向大佬看齐 大佬牛,学习,谢谢分享 虽然没看明白但是支持分享 没啥意义吧,修改增强一些功能才好 感谢无私分享,学习中~ 虽然有源码,但是要搞清楚,肯定要折腾不少时间{:1_893:} 学习了 很棒得内容