android 逆向 3 / 38
- app OAuth api_sign 分析
- app sig 参数加密分析 unidbg 模拟黑盒调用
- app sign so 加密参数破解|unidbg
- sgmain x-sign 分析 - unidbg
- androidAsync fridaManager sgmain 70102 rpc 远程调用
- app edata 参数 so aes 加密分析破解|unidbg
- frida 加载 sekiro dex 文件 实现与服务端交互
- frida sekiro 实现 sgmain 70102 远程 rpc 调用
- xposed sekiro hook 获取 wx 万能 key
- unidbg console debugger 使用
- unidbg hook inline hook 使用
- app 公众号文章列表 so 加解密算法分析还原 | 简单分析
- app 公众号文章列表 so 加解密算法分析还原 | 加密 rsa base64 分析
- app 公众号文章列表 so 加解密算法分析还原 | 加密 zip aes 分析
- app 公众号文章列表 so 加解密算法分析还原 | response 内容解密分析
- app sign so 加密算法分析还原|简单分析
- app sign so 加密算法分析还原|so 算法分析
- app sign so 加密算法分析还原|so sub_126AC 函数算法还原
- app so signkeyV1 参数分析
- ida 动态调试 android so 文件|基础入门环境搭建
- app so newSign 参数分析破解
- app tzRgz52a 参数分析破解
- app sign-v2 签名算法 aes 加解密分析
- app so 加密参数分析|protocbuf 分析
- mxtakatak android app 加解密分析
- android app so 加密算法分析破解|mtgsig unidbg
- android app so 加密算法分析破解|siua unidbg
- android app nsign so 加密算法分析
- android app sig 参数 so 加密逻辑逆向分析
- android app so sig 加密参数 unidbg
- 狗狗音乐登陆协议加密参数逆向分析
- android sign so 加密参数分析|unidbg
- android app X-SS-QUERIES 参数分析
- unidbg android app xgorgon 加密参数 leviathan
- sgmain 6.4.x xsign 加密算法分析研究
- sgmain 6.4.x xminiwua 加密算法分析研究
- 某 app mas 算法分析还原 cms so
- 某东登陆协议 tlv 逻辑分析
仅供学习研究 。请勿用于非法用途,本人将不承担任何法律责任。
前言
今天就来聊聊 jd app sign 的 so 加密
原文
跟着大佬走, 逆向不迷路
Unidbg模拟执行大厂so实操教程(一) 先把框架搭起来
Unidbg模拟执行大厂so实操教程(二)
借鸡生蛋之SandHook的使用(一)
借鸡生蛋之某电商App签名so的使用(二)
借鸡生蛋之某电商App签名so的使用(三)
这几篇文章看完后,大概就清楚了, 后面就开始直接撸代码
unidbg 搭建环境
跟着大佬的步骤走,先把环境搭建起来
import com.github.unidbg.AndroidEmulator;
import com.github.unidbg.LibraryResolver;
import com.github.unidbg.Module;
import com.github.unidbg.linux.android.AndroidEmulatorBuilder;
import com.github.unidbg.linux.android.AndroidResolver;
import com.github.unidbg.linux.android.dvm.AbstractJni;
import com.github.unidbg.linux.android.dvm.DalvikModule;
import com.github.unidbg.linux.android.dvm.DvmClass;
import com.github.unidbg.linux.android.dvm.VM;
import com.github.unidbg.memory.Memory;
import java.io.File;
import java.io.IOException;
public class JingDong extends AbstractJni {
private final AndroidEmulator emulator;
private final VM vm;
private Module module;
private DvmClass bitMapKitUtils;
// jd apk 文件路径
public String apkPath = "";
// jd apk so 文件路径
public String soPath = "";
private static LibraryResolver createLibraryResolver() {
return new AndroidResolver(23);
}
private static AndroidEmulator createARMEmulator() {
return AndroidEmulatorBuilder.for32Bit().setProcessName("").build();
}
public JingDong() {
emulator = createARMEmulator();
final Memory memory = emulator.getMemory();
memory.setLibraryResolver(createLibraryResolver());
vm = emulator.createDalvikVM(new File(apkPath));
vm.setVerbose(true);
DalvikModule dm = vm.loadLibrary(new File(soPath), false);
vm.setJni(this);
dm.callJNI_OnLoad(emulator);
module = dm.getModule();
}
public static void main(String[] args) throws IOException {
JingDong jd = new JingDong();
jd.destroy();
}
private void destroy() throws IOException {
emulator.close();
}
}
这里运行报错了,错误很明显,缺少环境,我们补上就行,在代码里加上下面这段代码
@Override
public DvmObject<?> getStaticObjectField(BaseVM vm, DvmClass dvmClass, String signature) {
switch (signature) {
case "com/jingdong/common/utils/BitmapkitUtils->a:Landroid/app/Application;":
return vm.resolveClass("android/app/Application",
vm.resolveClass("android/content/ContextWrapper",
vm.resolveClass("android/content/Context"))).newObject(null);
}
return super.getStaticObjectField(vm, dvmClass, signature);
}
再次运行,这次一路顺畅,JNI
调用的函数也一起 打印出来了
unidbg 调用 so 函数
继续跟着大佬的节奏走,开始调用 so
函数
分析过 android apk
文件的小伙伴应该都知道,最终是调用 getSignFromJni
函数获取 sign
加密的, 直接上代码
public void runJni() {
DvmClass Context = vm.resolveClass("android/content/Context");
bitMapKitUtils = vm.resolveClass("com/jingdong/common/utils/BitmapkitUtils");
DvmObject<?> strRc = bitMapKitUtils.callStaticJniMethodObject(
emulator,
"getSignFromJni()(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;" +
"Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;",
// Context 对象
vm.addLocalObject(null),
// functionId
vm.addLocalObject(new StringObject(vm, "msgEntranceV710")),
// body string
vm.addLocalObject(new StringObject(vm, "{\"flush\":\"0\"}")),
// uuid
vm.addLocalObject(new StringObject(vm, "")),
vm.addLocalObject(new StringObject(vm, "android")),
vm.addLocalObject(new StringObject(vm, "9.2.2")));
System.out.println(strRc.getValue());
}
public static void main(String[] args) throws IOException {
JingDong jd = new JingDong();
jd.runJni();
jd.destroy();
}

加上 runJni
函数之后,继续跑起来(具体参数,自行抓包获取)
在运行的过程中会遇到很很多错误,大多都是缺少环境的问题,补一下就 OK了
通过上面的这些图片可以看到,都是一些常常见的对象,
不过当遇到下图问题的时候就有点麻烦了,这个环境我也不知道怎么补,不过前面说到的大佬文章里有说过解决方案,就是去修改 so
文件的汇编代码
这里这贴一下链接: 借鸡生蛋之某电商App签名so的使用(三)
根据文章里说的步骤修改一下最后在保存就OK了
最后
难点主要在于
so
文件汇编代码的patch
不过已经有大佬踩过坑了,我们跟着大佬的路走就 OK,后面环境全部补完之后,也就可以运行出sign
了
想学习
unidbg
的伙伴,可点击加入星球,星主是一位全能的傻宝,每天都会分享各种姿势骚操作