首页
社区
课程
招聘
[原创]x64dbg 关于用户名和密码文本输入的思考FSCapture9.7
发表于: 2023-12-6 11:43 5000

[原创]x64dbg 关于用户名和密码文本输入的思考FSCapture9.7

2023-12-6 11:43
5000

作为新手,学了一段时间逆向,尝试破解FSCapture9.7遇到不少困难,
也得到了高手的指点,其中一个方法就是堆栈暂停回溯法,引起很多思考。对于这个软件来说,系统暂停后,用户区调用了很多的call才到核心代码。
后来又看论坛了解了,精准型消息断点,x64dbg表达式 打印日志等文章。
针对用户名和密码文本输入的思考有一个想法,对于无法搜索字符串,无法通过文本框下api断点,是不是可以找第一次文本在寄存器中出现的语句下断点?运气好的话可以直接到达关键代码段,就算不能,那也已经非常接近关键代码段,单步跟踪应该也能到达关键代码段。于是做如下尝试:
系统:win7 64
未注册版软件如下
链接:7c9K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6H3j5h3&6Q4x3X3g2T1j5h3W2V1N6g2)9J5k6h3y4G2L8g2)9J5c8Y4y4Q4x3V1j5I4i4K6g2X3N6%4u0t1g2%4f1&6h3U0N6D9f1h3x3$3N6$3I4u0c8q4q4q4f1e0q4%4i4K6y4r3M7s2N6V1i4K6y4p5x3$3!0G2y4H3`.`.
提取码:3oo7

过程如下

1.给注册按钮下精准消息断点

参考文章
偷换windows窗口过程 6f7K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1L8r3!0Y4i4K6u0W2j5%4y4V1L8W2)9J5k6h3&6W2N6q4)9J5c8X3I4A6P5r3W2S2L8X3N6E0K9h3&6Y4K9r3q4@1k6g2)9J5c8X3q4J5N6r3W2U0L8r3g2Q4x3V1k6V1k6i4c8S2K9h3I4K6i4K6u0r3y4K6p5#2z5e0R3I4y4U0b7`.
消息万能断点_win7万能断点  http://bbs.pediy.com/showthread.php?t=98274
精准型消息断点  c7fK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6*7K9s2g2S2L8X3I4S2L8W2)9J5k6i4A6Z5K9h3S2#2i4K6u0W2j5$3!0E0i4K6u0r3M7q4)9J5c8U0j5K6y4U0f1#2y4e0l9J5y4H3`.`.

首先载入程序,在程序入口自动暂停

点击运行,弹出过期窗口,点击输入注册码按钮,开始注册

输入用户名,密码,此处不要点击注册,进入句柄窗口,获取句柄

进入句柄窗口,点击刷新

显示了当前程序的所有控件句柄信息,选择注册按钮,
此处我们需要复制注册按钮的父窗体句柄,注册按钮的句柄,后面会用到

现在开始下精准消息断点,前提要载入user32.dll的符号信息
搜索internalcallwinproc,F2下断点

进入断点窗口,
精准消息断点参数如下:
模块=user32.dll.__InternalCallWinProc@20
暂停条件   
arg.get(1)==0x父句柄  && arg.get(2)==0x111 && arg.get(4)==0x按钮句柄
举例
arg.get(1)==0x191008 && arg.get(2)==0x111 && arg.get(4)==0xB0DCA

2.通过内存断点返回用户领空

F9运行程序,程序跑起来了,点击注册按钮,程序断在internalcallwinproc处,检查堆栈参数是否正确

返回内存布局页面给code下内存断点

点击F9运行程序,断在用户领空

3.利用步进直到满足条件功能,打印所有的寄存器日志信息

参考
菜鸟的福音-x64dbg完美追踪方案b8aK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3f1#2x3Y4m8G2K9X3W2W2i4K6u0W2j5$3&6Q4x3V1k6X3L8%4u0#2L8g2)9J5k6i4m8Z5M7q4)9K6c8X3#2G2k6q4)9K6c8s2k6A6k6i4N6@1K9s2u0W2j5h3c8Q4x3U0k6S2L8i4m8Q4x3@1u0@1K9h3c8Q4x3@1b7I4z5o6f1#2x3o6t1&6i4K6t1$3j5h3#2H3i4K6y4n7K9r3W2Y4K9r3I4A6k6$3S2@1i4K6y4p5P5o6j5@1k6r3u0Y4      https://bbs.kanxue.com/thread-279502.htm
X64Dbg 介绍->表达式- iBinary   ab6K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2U0L8X3u0D9L8$3N6K6i4K6u0W2j5$3!0E0i4K6u0r3K9f1u0A6L8X3q4J5P5g2)9J5c8Y4m8Q4x3V1j5I4y4U0x3#2z5e0p5&6y4g2)9J5k6h3S2@1L8h3H3`.

此时把断点禁止,以免跟踪时被暂停

点击菜单栏的跟踪,选择步进直到满足条件功能

步进直到满足条件的参数设置如下:
日志文本:###{modname@cip}{a:cip}#{i:cip}--->eax{a:eax}--ebx{a:ebx}--ecx{a:ecx}--edx{a:edx}--esp{a:esp}--ebp{a:ebp}--esi{a:esi}--edi_{a:edi}
日志条件:mod.party(cip)!=1  意思是仅当用户领空时打印日志

此处的输出有2种,1.如果选择了日志保存位置,会以log文件的形式,输出到指定目录;2,如果不选择目录,会默认输出到日志选项卡
因为输出内容非常多,此处我们选择保存log文件

点击确定后开始跟踪,指定步数后暂停

4.找到用户名或者密码的语句

找到保存的log目录

利用搜索功能,查找用户名或者密码.
找到第一次出现的用户名或者密码,记下地址

5.用转到表达式功能ctrl+G,定位到代码,下断点。
或者,在到达位置往上找到段的起始位置下断点后跟踪程序

重新运行程序,断在关键代码区域,开始单步跟踪分析程序

跟踪不久发现相关注册信息

继续跟踪,发现了关键跳转语句,跳向不同的注册类型。选择某一个类型即可注册成功。

本文结束


[培训]科锐逆向工程师培训第53期2025年7月8日开班!

最后于 2023-12-7 22:49 被ieusr编辑 ,原因:
上传的附件:
收藏
免费 3
支持
分享
最新回复 (9)
雪    币: 449
活跃值: (2632)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
所以最后搞定了吗
2023-12-6 12:21
0
雪    币: 5280
活跃值: (5325)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
0070C24C    55                       PUSH EBP   //注册按钮的事件断点.   

暂停法
或者 delphi 事件特征都很容易找到
74 0E 8B D3 8B 83 24 01 00 00 FF 93 20 01 00 00 5B C3

00450946   /74 0E                    JE SHORT FSCaptur.00450956
00450948   |8BD3                     MOV EDX,EBX
0045094A   |8B83 24010000            MOV EAX,DWORD PTR DS:[EBX+0x124]
00450950   |FF93 20010000            CALL DWORD PTR DS:[EBX+0x120]
00450956   \5B                       POP EBX
00450957    C3                       RETN

继续努力吧.

2023-12-6 12:34
0
雪    币: 111
活跃值: (443)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
轻装前行 所以最后搞定了吗
搞定了,继续跟踪就到关键代码了。
2023-12-6 12:51
0
雪    币: 111
活跃值: (443)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
Mxixihaha 0070C24C 55 PUSH EBP //注册按钮的事件断点. 暂停法 或者 delphi 事件特征都很容易找到 74 0E ...
谢谢,好好学习一下你说的这个按钮事件。
2023-12-6 12:52
0
雪    币: 5280
活跃值: (5325)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
ieusr 谢谢,好好学习一下你说的这个按钮事件。
https://bbs.kanxue.com/thread-260394.htm
这里有历史参考.
2023-12-6 13:17
1
雪    币: 39209
活跃值: (7505)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
按钮事件咋来的? 分析下吧
2023-12-6 15:36
0
雪    币: 183
活跃值: (60)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
虽然说了怎么做,但是没说为啥这样做,初学的没啥帮助
2024-5-14 14:01
0
雪    币: 111
活跃值: (443)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
Delphi & BC++ 按钮单击事件特征码为:
740E8BD38B83????????FF93     //  问号??表示任意字符的意思
在所有特征都下断点,然后回到程序,点击目标按钮
2024-7-31 23:05
0
雪    币: 111
活跃值: (443)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
重新认识Delphi程序按钮事件特征码
191K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3f1#2x3Y4m8G2K9X3W2W2i4K6u0W2j5$3&6Q4x3V1k6@1K9s2u0W2j5h3c8Q4x3X3b7I4y4U0p5^5y4e0V1$3i4K6u0V1x3g2)9J5k6o6q4Q4x3X3g2Z5N6r3#2D9
(出处: 吾爱破解论坛)
在学习各语言的按钮事件中,会在很多论坛上看到关于Delphi程序的特征码:740E8BD38B83????????FF93。
可是,你会发现很多时候你并不能断下来。
什么原因呢?未必就是你的问题。
附件里我提供给你两个Delphi程序,是从160个crackme里面随便找的。
你可以用上面的特征码试试看,能不能到按钮事件。
如果不行,那么我再给你提供一个新的特征码:74108BD88BD08B83????????FF93
你再试试,能不能断下来?
所以,别总否定自己,可能不是你的错!
以后遇到Delphi程序,你把这两个特征码都试试。
2024-8-1 13:44
0
游客
登录 | 注册 方可回帖
返回