所需工具
NTR Debugger | NTR CFW DEX 2.2 下载请到 NTR CFW相关文章
IDA PRO 下载地址如下
Hex-Rays.IDA.Pro.v6.5.READ.NFO-DVT.rar [2015-05-19]
当然 PYTHON之类的环境也是必须的
断点环境
3DS进入NTR CFW自制系统 加载游戏的同时按住十字键← 上屏会闪烁几次 然后停在入口点 不会进入游戏
PC端打开NTR Debugger 连接到3DS 连接方式跟之前非断点方式不太一样 命令如下
1 |
connect('3ds的IP地址', 5000 + 0xID编号) |
IP地址就不说了 ID编号也就是游戏所在内存的ID 此时按X+Y打开NTR菜单 选择Process Manager 光标移动到最后 一般倒数第二个或者第三个就是ID编号 可以通过按A键进入后的info菜单中的游戏ID来确定 比如ID编号为00000028 那么上面就填入28即可
连接上之后提示你输入
1 |
continueprocess() |
输入该命令就可以进入游戏了
添加删除断点
1 |
bpadd(addr) |
1 |
bpadd(addr,'thumb') |
1 |
bpdis(id) |
1 |
bpena(id) |
可以添加32个
1 |
wpadd(addr) |
1 |
wpadd(addr,'wide','type') |
1 |
wpdis(id) |
1 |
wpena(id) |
因为硬件限制 这里只能添加2个 所以id为0 或者 1
禁用断点后 输入一下命令来恢复游戏运行
1 |
resume() |
如果还是不断触发断点 可以用下面的命令删除内存断点
1 |
wpdel(id) |
查看游戏中某个地址数据的命令为:
1 |
data(0xDDDDDDDD, 100) |
1 |
data(0xDDDDDDDD, 0x100) |
DDDDDDD为你所想查看的地址 后面如果直接写100为十进制计算 0x100则按16进制计算显示的数据长度
查看其它寄存器
触发断点后 可以通过以下命令来查看其它寄存器的数值
display()可用来显示一些寄存器信息 具体使用命令如下
1 |
display('single') |
1 |
display('double') |
以上命令只能在断点触发后使用
显示使用的断点
以下命令用来显示当前存在的断点
1 |
display('breakpoint') |
1 |
display('watchpoint') |
这两个命令在未触发断点时也可以使用
单步执行
在触发断点后 可以用以下命令来单步执行
1 |
step() |
可以用resume()来退出单步执行
分析断点
用IDA PRO打开断点所在区域的内存 并通过获得的断点数据来分析
2015年05月19日 18:31 沙发
baga 在A9 教過了
2015年05月19日 19:40 1层
@ioritree @ioritree : :zhh: 那你又不告诉我 害我琢磨了好几天 :yhh:
2015年05月19日 19:54 板凳
把4組dump(0x01 0x08 0x14)和相對應的hp位址給我 用artmoney來找
2015年05月19日 19:59 1层
@qq @qq : 数据在08区 应该不需要14区的吧 我有001和08区的 4组001和08区文件如下 HP地址就是目录名
链接: http://pan.baidu.com/s/1dDtoGWL 密码: my3j
2015年05月19日 20:01 地板
這不用寫出來 多此一舉 對老金有愛的只有你們而已
2015年05月19日 20:03 1层
@qq @qq : 其实我就是写给自己备忘的 你们哪需要看这种初级文章
2015年05月19日 20:04 2层
@七支剑 @七支剑 : 可以透過G點來找嗎?
2015年05月19日 20:07 3层
@ioritree @ioritree : 都怪你不早告诉我 害我写出来被大家笑
2015年05月19日 20:11 4层
@七支剑 @七支剑 : 如果我看的懂 我就會笑你,但是我看不懂 哈哈哈 表示佩服
2015年05月19日 20:09 4楼
作者有說 可以在中斷的時候改寄存器的value ,sp -0x88 <--
2015年05月19日 20:14 1层
@ioritree @ioritree : 但是那里的数据无法用金手指获取 我问过了
2015年05月19日 20:16 2层
@七支剑 @七支剑 : 用code cave 應該可以獲取? 貌似不行這樣設定 addr = Reg->r[sp];
2015年05月19日 20:17 3层
@ioritree @ioritree : 所以说啊 我不会CODECAVE 只能用这种低端的方法
2015年05月19日 20:21 5楼
不對阿…幹嘛用金手指獲取sp的數據…脫褲子放屁,這個應該是給baga用來做指針搜尋工具用的
2015年05月19日 20:22 1层
@ioritree @ioritree : 难者不会 会者不难啊
2015年05月19日 20:25 6楼
用sp做指針搜尋工具,應該就會像xce3.0的 指針搜尋工具那樣 快又準
2015年05月19日 21:11 1层
@ioritree @ioritree : 貌似给BAGA的还不是三级指针 是5级
2015年05月19日 22:25 2层
@七支剑 概念是對的,但over level 1方法是錯的
和bp只可以顯示+AAA,不能顯+AAAA戓+AAAAA
2015年05月19日 23:03 3层
@optantic @optantic : 诶 这是什么意思 不懂
但是测试了好几次 地址是正确的
另外多级指针可以这样写吗
addr = GetDWORD(GetDWORD(GetDWORD(GetDWORD(GetDWORD(0xDDDDDDDD) + 0x4) + 0x90) + 0x08) + 0x08) + 0x350;
2015年05月20日 00:52 4层
@七支剑 addr=getdword(0xdddddd)+0x1234

bp只可以顯示+234
可以,但ioritree説這寫法
2015年05月20日 00:55 5层
@optantic @optantic : IDA PRO最大只能显示FFF?
2015年05月20日 01:01 6层
@七支剑 是3位數
2015年05月20日 01:09 4层
@七支剑 p2+3 level1 也一直有效?
2015年05月20日 01:21 5层
@optantic @optantic : 不是 刚测试又不对了
2015年05月20日 01:29 6层
@七支剑 p1是lv5,2.3.4,enemy應該也是一樣
2015年05月20日 06:52 4层
@七支剑 請用089939A4的memory dump+4+90+8+8+350是否=hp address
2015年05月19日 23:06 2层
@七支剑 x360來講 用tool找最準 bp的offset很多是加工過的
arm offset只有12bit 能不能用要試試
2015年05月19日 23:10 3层
@qq @qq : 栈回溯(stack trace)BAGA大知道有什么好的算法没 作者想做这个苦于没有好的算法
2015年05月20日 10:32 4层
@七支剑 查google
gcc會產出2種碼 apcs unwind
2015年05月19日 22:22 1层
@ioritree artmoney 檔案不能找2階以上
2015年05月19日 22:25 2层
@qq @qq : 一阶optantic教过我 哈哈 我以为能找2阶以上的 :wq:
2015年05月29日 02:46 2层
@qq @qq baga大大有办法找多级指针吗
2015年05月29日 22:35 3层
@七支剑 你不是已經找到level5了麼
2015年05月30日 00:44 4层
@optantic @optantic : 那个方法貌似不太对 你之前也说我那个方法LEVEL1以上不行么
2015年05月30日 00:56 5层
@七支剑 如果遊戲是使用第一個斷點的話,或者可行
tools找不到,可以用hexworkshop找
2015年05月29日 11:46 2层
@qq 3ds靜態區範圍? 程式區範圍?
2015年05月29日 12:04 3层
@qq @qq : 001区貌似是静态区和程式区 有时候08区和14区也有静态数据
2015年05月20日 01:43 7楼
看的我醉了 :tu:
2015年05月28日 23:02 8楼
看不懂
2015年05月28日 23:10 1层
@optantic @optantic : only list command
2015年05月29日 14:34 9楼
作者會做disassembler? 斷點的前後幾十行asm
現在你們有遇到thumb碼?
2015年05月29日 14:39 1层
@qq @qq : 貌似没说 前后ASM用IDA PRO能看?
thumb格式我不懂 也许遇到了我也看不懂
2015年05月29日 19:18 10楼
我之前向enler提出了設置或搜斷點時也顯示前後約略五至十行的disasm…不過還是被駁回
2015年05月29日 20:44 1层
@ioritree disasm不會難 做苦工
2015年05月29日 21:07 2层
@qq @qq : baga大有空的话能指导一下么
2015年06月09日 12:14 11楼
其实IDA有6.6版本泄漏。具体的新闻我记得看雪上见过。(只告知,我不是汇编高手)
2015年06月09日 12:28 1层
@Nobody 感谢告知 有时间我去找找看
2015年10月11日 23:31 2层
@七支剑 顺带一提,citra针对游戏直接实现了gdb接口,然后IDA挂调试进去了。此外让我吐个槽:收集金手指时候,@ioritree做了一堆,更新时候还要挨个翻过去,挨个保存说明,挨个建立文件夹,挨个解压压缩包,很囧啊。不指望NTR自身的插件处理部分能够读取文件列表,然后根据ID后信息直接加载对应文件组,但至少可以最新金手指是直接整合的吧?要么RSS通知某金手指更新也好啊。
2015年10月11日 23:46 3层
@Nobody 感谢提醒
金手指是直接整合的 如果你指把目录都建立好 这不科学 一个金手指文件复制N份发布不太现实 容量也会很大 而且你可以通过网页右上角的最近更新可以查看最近的更新 金手指列表每个金手指文章中都有 想要什么游戏的列表中搜索下即可下载最新的版本 我能想到唯一有障碍的只不过搬运起来有困难 对用户完全没有问题
PS:金手指文件直接放在plugin/game/目录下的话是可以直接在所有包含的对应游戏中生效的 只不过所有网络功能都会失效 而不仅仅是游戏的网络功能失效
2015年10月12日 20:56 4层
@七支剑 点开金手指列表看着容易,实际上每次加载带有列表的页面,不论是评论还是主体,都需要160KB+的流量,或许这点值得你开网页浏览器的控制台看看。流量无限么?
金手指直接整合没错,也没必要一次建立完。实际上,直接给压缩包里面塞一个包含列表,用户下载后执行对应工具后批处理会自动开文件夹并复制,压缩包里面只有一个cheat.plg和列表文件。毕竟访客要一个个的看过去,而作者自己知道插件包括哪些ID。当然C#的小程序或者Node.js的脚本都可以很快搞定。
string[] IdList=File.ReadAllLines(@”Include.list”,Encoding.GetEncoding(936)); //GBK.默认UTF8
for (int i=0;i
2015年10月12日 21:00 4层
@七支剑 点开金手指列表看着容易,实际上每次加载带有列表的页面,不论是评论还是主体,都需要160KB+的流量,或许这点值得你开网页浏览器的控制台看看。流量无限么?
金手指直接整合没错,也没必要一次建立完。实际上,直接给压缩包里面塞一个包含列表,用户下载后执行对应工具后批处理会自动开文件夹并复制,压缩包里面只有一个cheat.plg和列表文件。毕竟访客要一个个的看过去,而作者自己知道插件包括哪些ID。当然C#的小程序或者Node.js的脚本都可以很快搞定。
C#主函数部分关键代码:
string[] IdList=File.ReadAllLines(@”Include.list”,Encoding.GetEncoding(936)); //GBK.默认UTF8
for (int i=0;i
2015年10月12日 21:02 4层
@七支剑 点开金手指列表看着容易,实际上每次加载带有列表的页面,不论是评论还是主体,都需要160KB+的流量,或许这点值得你开网页浏览器的控制台看看。流量无限么?
金手指直接整合没错,也没必要一次建立完。实际上,直接给压缩包里面塞一个包含列表,用户下载后执行对应工具后批处理会自动开文件夹并复制,压缩包里面只有一个cheat.plg和列表文件。毕竟访客要一个个的看过去,而作者自己知道插件包括哪些ID。当然C#的小程序或者Node.js的脚本都可以很快搞定。
PS:直接扔plugin/game/这样的话简直得不偿失,毕竟有不少作者的金手指文件。
PS:还有希望你去github上enler的NTRClient看看,Issue里面gdb相关说清了。
2015年10月12日 23:01 4层
@七支剑 囧,评论失效了。
2015年10月12日 23:02 4层
@七支剑 囧,评论失效了。算了再测试一次。
2015年10月13日 22:57 5层
@Nobody pan.baidu.com/s/1c0pwCj2#vd73
看过了,原来有ioritree的金手指插件内嵌列表判断,分析下掏出关键函数和偏移做了自动化程序,链接里面只是代码,请自行编译。至少我在他人的里面没见过,可见丢plugin/game是挺不负责的囧,毕竟NTR本身不知道某个插件是否适合游戏。
当然还是作者直接提供列表的文件更简单和准确。
@ioritree 请原谅我。从某列表上挨个点开页面,实在是很麻烦。之后还要挨个下载和建立目录和复制文件,我确实分析了你的文件。愿你看着这种Orz的收集者就笑笑好了。NTR的金手指插件没CMF之类神奇好用,不过要还是感谢你的努力。
2015年10月13日 23:02 5层
@Nobody 顺带一提,贵站的回复贴出来对我似乎有点难。上面那堆重复的看完可以清理了,都是我昨天持续收到“Duplicate comment detected; it looks as though you’ve already said that! ”字样,Ctrl+F5却没看到,还以为没发出去。求别告诉我是昨天才开的静态缓存,刷新周期N小时?这简直太延迟了……或许可以试试W3 Total Cache?当然WP的折腾其实我不会……
2015年10月14日 00:57 6层
@Nobody 注册用户即可 另外你说的那些估计需要@baga来看看了
2015年10月14日 10:14 12楼
伸手黨不要太懶 剪貼佔不了多少你撸管的時間
2015年10月14日 11:53 1层
@Nobody 我赌5毛这是baga大仙
2015年10月14日 12:08 13楼
一拳超人 超熱血的
2015年10月14日 20:31 1层
@ioritree 又有新番可以追了?
2015年10月14日 22:17 14楼
想看肉番…
2015年10月15日 01:45 1层
@ioritree 肉番质量太低
2021年03月05日 22:48 15楼
博主你好,我用debugger投屏电脑时遇到了些技术问题。首先,我用了加速器加速了我的3DS,加速器给3DS固定了IP.网关等。然后我用FBI查到的3DS的IP地址是固定的,但是数字是5000,输入 connect(‘我的IP’, 5000),这个数字为啥时5000?输入后,提示“由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败”。请问如何解决?
2021年03月06日 18:34 1层
@炽红莲 我记得串流是8000端口吧 这篇文章的最上方有个链接可以点进去看下