Linux 使用 Jlink, 阻止JLink 弹窗警告

1
yay -S jlink

装好后这个 jlink 会把jlink 的SN 号改成 20160803
导致在后续的烧写过程中 JLINK 的DLL 识别到是盗版, 会弹窗, 很烦
但是不装这个jlink pyocd 又不认识jlink…

1
pyocd list

能识别这个就可以使用pyocd 通过 jlink 烧写程序了

pyocd 使用jlink烧写程序

和使用DAPLink 一样的命令, 不需要加任何参数, pyocd 会自动识别
例如: program_chip.sh

1
2
pyocd load "build/XXX.bin" --target=XXX --pack=xxx_DFP.Pack.0.2.0.pack
pyocd reset --target=XXX --pack=xxx.Pack.0.2.0.pack

原因应该是安装 Jlink 驱动的时候, 同时安装了一大堆Jlink 的 desktop, 有可能pyocd 在烧写过程中会优先去使用系统的工具
, 但是我已经把 libjlinkarm_x86.so 和 libjlinkarm.so 都 patch 了也还是会弹窗, 搞不清楚是哪里弹窗, 有可能是pyocd 自己弹窗的

解决办法

把安装Jlink 时安装的Jlink 全家桶换个路径, 这样pyocd 就找不到它了, 就不会弹窗了

1
2
cd "/opt/SEGGER"
sudo mv JLink JLink_2

然后再把 “/opt/SEGGER/JLink_2” 加入到PATH 即可

1
vim ~/.zshrc

添加 “export PATH=/opt/SEGGER/JLink_2:$PATH”

一共有两个库要修改, 一个是libjlinkarm.so 另一个是libjlinkarm_x86.so, 修改的方法都是一样的, 这里以 libjlinkarm.so 为例

把 libjlinkarm.so.8.10.4 拖到 Ghidra 中分析

一般来说可以自动识别文件类型, 使用默认的就好了

点击 Analyze , 等待几分钟, 等Ghidra 分析完成

定位弹窗的代码位置

打开字符串窗口

Window => Defined strings

搜索 clone

在代码窗口上把光标移到对应字符串点右键 References => Show References To Address

双击引用的地方跳转到函数内, 在右侧窗口切换到 Decompile 窗口查看函数伪代码

修改代码绕过弹窗

分析伪代码可以知道, 检测和弹窗在while 循环里, 我们可以直接修改汇编, 绕过这个有while 代码, 让函数进来后直接跳转到 FUN_00608270(DAT_01480b70); 那里去
在0x42b3a5 那一行按右键 Patch Instruction 或者快捷键 Ctrl + Shift + G

然后直接修改代码即可

原代码

修改后

给原始的so 或者 dll 打补丁

定位代码在二进制中的偏移

鼠标放在代码行的地址上, 等两秒钟就会弹出一个Offset 的窗口, 里面的Byte Source Offset 就是该代码位于二进制中的偏移, 这里是 0x32b3a5

修改二进制

1
2
cd /opt/SEGGER/JLink
sudo hexedit libjlinkarm.so

按回车 然后输入 32b3a5 回车, 跳转到代码位置

按方向键移动光标 把EB 18 改为 EB 22
按 F2 保存
按Ctrl + c 退出

libjlinkarm_x86.so 修改位置

源代码

修改后

Licensed under CC BY-NC-SA 4.0