android逆向菜鸟速参手册完蛋版过校验_第1页
android逆向菜鸟速参手册完蛋版过校验_第2页
免费预览已结束,剩余1页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、过SO签名校验在分析某软件 的时候发现重打包的时候出现闪退现象, 我下意识的怀疑是 签名校验, 下面是分析过程,大家都知道 Java端获得签名的代码如下:PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), 64);Signature sign = info.signatures0;从而我就从 smali 代码中搜索 “signatures”, 没找到, 难道猜错了, 看到 有so 文件, 就拖进 IDA 中分析, 然后在ida中搜索 字符串”signatures”有关键字

2、出现, 然后我们跳转到对应的代码处, 发现此程序是通过反射机制来获得签名的,使用 Jni 反射获得签名的 代码如下:int getSignHashCode(JNIEnv *env, jobject context) /Context的类jclass context_clazz = (*env)-GetObjectClass(env, context);/ 得到 getPackageManager 方法的 IDjmethodID methodID_getPackageManager = (*env)-GetMethodID(env, context_clazz,getPackageManager

3、, ()Landroid/content/pm/PackageManager;); / 获得PackageManager对象jobject packageManager = (*env)-CallObjectMethod(env, context,methodID_getPackageManager);/ 获得 PackageManager 类jclass pm_clazz = (*env)-GetObjectClass(env, packageManager);/ 得到 getPackageInfo 方法的 IDjmethodID methodID_pm = (*env)-GetMethod

4、ID(env, pm_clazz, getPackageInfo,(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;);/ 得到 getPackageName 方法的 IDjmethodID methodID_pack = (*env)-GetMethodID(env, context_clazz,getPackageName, ()Ljava/lang/String;); / 获得当前应用的包名jstring application_package = (*env)-CallObjectMethod(env, context,metho

5、dID_pack);const char *str = (*env)-GetStringUTFChars(env, application_package, 0);_android_log_print(ANDROID_LOG_DEBUG, JNI, packageName: %sn, str); / 获得PackageInfojobject packageInfo = (*env)-CallObjectMethod(env, packageManager,methodID_pm, application_package, 64); jclass packageinfo_clazz = (*en

6、v)-GetObjectClass(env, packageInfo);jfieldID fieldID_signatures = (*env)-GetFieldID(env, packageinfo_clazz,signatures, Landroid/content/pm/Signature;);jobjectArray signature_arr = (jobjectArray)(*env)-GetObjectField(env,packageInfo, fieldID_signatures);/Signature数组中取出第一个元素jobject signature = (*env)-

7、GetObjectArrayElement(env, signature_arr, 0);/读signature的hashcodejclass signature_clazz = (*env)-GetObjectClass(env, signature);jmethodID methodID_hashcode = (*env)-GetMethodID(env, signature_clazz,hashCode, ()I);jint hashCode = (*env)-CallIntMethod(env, signature, methodID_hashcode);_android_log_pr

8、int(ANDROID_LOG_DEBUG, JNI, hashcode: %dn, hashCode);return hashCode;是一个简单的校验过程, 这里我本以为很简单的把 0 x23366 地址的代码NOP掉,然后重新打包测试 发现软件会直接发生错误, 看来这样直接NOP 不行, 那么我们就换种思路, 我这边是 直接将 r8中正确的签名值 复制到 r5 中, 我们需要Patch汇编代码进去,可直接修改 getSigns 函数, 首先我们编写一段复制的汇编代码.globl _start.align 2_start:.code 16 PUSH R4-R7,LRmov r2,r0mov r3,r8mov r1,#0loop:ldrb r1,r3strb r1,r2add r2,#1add r3,#1cmp r1,#0bne loopPOP R4-R7,PC然后我们使用 as.exe 来编译这段代码as strcpy.asm -o strcpy.o在使用IDA 反编译 strcpy.o 文件获得 代码的16进制值为 “F0B5021C4346002119781170013201330029F9D1F0BD”然后WinHex 打开lib

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论