JEB搜索字符串
1. 打开smali视图
///双击"Bytecode"会打开两个窗口,两个窗口都显示反编译后所有smali文件
Bytecode/Hierarchy视图: //以树形结构显示所有smali文件
Bytecode/Disassembly视图: //所有smali文件都包含在Disassembly一个文件中
2. 在smali中搜索字符串
///切换到” Bytecode/Disassembly视图”, 选择String选项卡 ![]() ///搜索”注册失败”, 双击搜索到的结果,会跳转到smali中对应的位置 ![]() |
3. 在java代码中搜索字符串
3.1 假设要在java代码中,搜索哪些位置用到了xml中的字符串”reg” ![]() 3.2 通常先将”reg”的id号:ox7F080000转换为10进制的:2131230720, 再搜索这个10进制数 3.3 在smali视图中,按Q键,解析为JAVA代码 3.4 在java代码中, Ctrl+F查找字符串 ![]() |
JEB反混淆神器(修改混淆过的方法名)
混淆处理过的方法不便于分析, 当我们分析过了a()方法, 知道了a()方法的作用是检查SN, 可以给方法重命名为: chechSN() ///光标定位到方法名之前(或选中方法名), 按快捷N ![]() |
JEB动态调试---获取注册码_ crackme02
1. 在”雷电模拟器”中运行apk程序
2. 在JEB的checkSN()方法中下断点
Ctrl+B //下断点 .method private checkSN(String, String)Z .registers 13 00000000 const/4 v7, 0 00000002 if-eqz p1, :12 :6 00000006 invoke-virtual String->length()I, p1 0000000C move-result v8 0000000E if-nez v8, :14 :12 00000012 return v7 :14 00000014 if-eqz p2, :12 ///在此处下断点,可以查看参数寄存器:p1和p2的值 |
3. 在JEB中附加apk进程
![]() 在弹出的提示框中点击"确定"按钮 ![]() |
在弹出的"附加"窗口中,设置要附加的进程 01. 在设备列表中,选中安卓设备 02. 在进程搜索框中,光标定位到进程名的结尾处, 按回车键搜索进程 03. 选中搜索到的进程, 点”附加”按钮 ![]() |
4. 在apk程序中注册,触发断点
1. 注意要输入16位的注册码 | 2. 断点被触发 ![]() |
5. 在控制台窗口打印用户名和注册码
![]() readvar p1 string //显示: "tony" readvar p2 string //显示: "123456789abcdefg" |
6. 在”寄存器窗口”查看注册码
///v6其实就是”用户名”经过MD5加密后的注册码,在这里下断点 ![]() ///运行到断点位置后, 再F6单步 ![]() /// 因为寄存器窗口中,默认显示的类型为int, 要将v6修改为string类型,才能显示正确的注册码 ![]() // 用户名为: tony, 注册码为: dcfe628ebf73f1c0 |