当前位置:首页>安卓APP>安卓逆向-so逆向案例2

安卓逆向-so逆向案例2

  • 2026-10-11 06:26:20
安卓逆向-so逆向案例2
一、so层逆向
在jadx中java层最后跟值如下,确定是在so层,定位为libnative-lib.so

进入IDA,搜索导出表,搜索securityPsd,进去,把汇编代码变成伪代码

int __fastcall Java_com_XXX_SecurityUtils_securityPsd(int a1, int a2, int a3, int a4, int a5)

根据之前安卓逆向案例1将的原理,a1修改为JNIEnv* env,a2改为clazz, 后面3个参数根据对应java层的securityPsd修改

找到最底下的返回值v16,发现和上个案例不太一样,这so最后还是调用了java层的方法,查看v11、v18、v12、v15

v16 = _JNIEnv::CallStaticObjectMethod(env, v11, v18, v12, v15);

v11、v18调用了java的WeicoSecurityUtils类中securityPsd静态方法

v11 = (*env)->FindClass(env, "com/SecurityUtils");v18 = (*env)->GetStaticMethodID(env, v11, "securityPsd", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;");

v12为传入的pwd

v19 = v10->GetStringUTFChars(env, pwd, 0);v12 = (*env)->NewStringUTF(env, v19);

v15看IDA不知道是什么,待定。----->后面通过frida hook发现他就是公钥

二、返回java

查看java的WeicoSecurityUtils类中securityPsd静态方法

一眼RSA

RSA加密原理:RSA的逻辑是先传入字节流(byte),然后使用X509EncodedKeySpec对象包装成Java 能识别的公钥规范对象,然后用KeyFactory生成公钥

能看到使用了X509EncodedKeySpec对象,且KeyFactory.getInstance(KEY ALGORITHM) 中KEY ALGORITHM是RSA,符合RSA的加密流程

但知道了是RSA后,还缺少一个公钥,先在java的password加密时进行hook,看看公钥是什么?

三、frida hook

针对securityPsd进行hook,

frida -U -f com.sina.weibolite -l hookpwd.js

我靠,这不和v15里面的值一模一样吗,一下子就都明白了

学习自x1a0f3n9大佬的公开视频,外加整合了自己的一些分析

相关参考资料,感兴趣再去看吧
https://www.bilibili.com/video/BV17Xj2zHEKX?spm_id_from=333.788.videopod.sections&vd_source=fc6598fcf400242aefec0036f4e6838b

最新文章

随机文章