1. 打开jadx,就发现了我们的老朋友数字壳

  2. 典型的类抽取壳,直接上fart脱就完事了,我这里使用的是fart的frida脚本,省去了刷机的步骤

    这里的脱壳脚本,自行去github的寒冰大佬那边clone 一份下来,注意一点,就是fart.so和fart64.so copy在/data/local/tmp

    下,或者sdcard下,直接拷到/data/data下面,没权限,所以先做个过渡,先把文件放到我们能控制的地方,再adb shell进入机子,su切换成root,再cp过去

  3. 筛选出dex

  4. jadx打开dex,查看逻辑



    native的函数对我们传入的字符串进行校验,ida直接安排上

  5. 发现是静态注册,继续跟进去



    发现函数都被加了ollvm,不过混淆的强度不是很高



    耐心的看分发变量的取值,跟着逻辑走一遍,还是可以看出执行流程的,直接跟进核心逻辑



这里也可以和上面一样慢慢跟,但是有快的方法,这里想到是直接在每个函数中加个log,这样的话,当每次执行的

时候,log也会根据执行顺序打印出来。

7.



8. 因为写之前已经知道,考点是常用的加解密算法,所以我直接把参数和返回值dump出来看看



没法全部截图出来,这里也主要是记录下思路,发现返回值最后有两个等号,很有可能是base64,自己

本地解密后,和传入的参数比较,发现就是base64加密

9.发现这个函数,返回值都是16字节,说明是个哈希算法,盲猜md5,sha1之类



用fincrypt搜下常量,并没有搜到关于哈希的东西



反而是搜到aes,查看了下引用,发现就是在上面sub_D7EC函数中

10.怀疑是把常量嵌入到汇编中了,所以直接ida文本搜索下



这里我ida抽风了,之前可以搜到,刚刚又搜不到,但是查看引用,实锤了那个函数就是md5

11.基本逻辑差不多就捋清楚了,先经过md5加密,然后base64,然后aes,然后base64

至于密文,直接hook libc中的strcmp函数,把参数dump出来就好了,但是注意这个是系统的api,hook的话,

会有很多app调用这个函数,所以手法就是在hook最后一个执行函数后,再进行hook,这样就不会又那么多的

干扰

12.放下我hook脚本



function hookStrcmp()
{
var libcmodule=Process.findModuleByName("libc.so");
var strcmp_addr=libcmodule.findExportByName("strcmp");
Interceptor.attach(strcmp_addr,{
onEnter:function(args){
console.log("strcmp_addr_args[0]->",hexdump(args[0]));
console.log("strcmp_addr_args[1]->",hexdump(args[1])); },onLeave:function(retval)
{
console.log("strcmp_addr_retval->",retval);
}
})
} function main()
{
/*
sub_428BC(*(_DWORD *)(v9 - 8), v32);
sub_42888(v10);
sub_8748(v32, 16);
sub_D7EC(&unk_540C5, *v33); // 第二块的代码
strcmp(*v34, *v37);
*/
var libnativemodule=Process.findModuleByName("libnative-lib.so");
var libnativebaseadd=Module.findBaseAddress("libnative-lib.so");
var testjni=libnativemodule.findExportByName("Java_com_kanxue_test2_MainActivity_jnitest");
var sub_428BC=libnativebaseadd.add(0x428BC).add(0x1);
Interceptor.attach(sub_428BC,{
onEnter:function(args){
console.log("get into sub428BC:arg0->",hexdump(args[0]));
console.log("get into sub428BC:arg1->",hexdump(args[1])); },onLeave:function(retval)
{
console.log("end into sub428BC:retval->");
}
});
var sub_42888=libnativebaseadd.add(0x42888).add(0x1);
Interceptor.attach(sub_42888,{
onEnter:function(args){
console.log("get into sub42888:arg0->"); },onLeave:function(retval)
{
console.log("end into sub42888:retval->");
}
});
var sub_8748=libnativebaseadd.add(0x8748).add(0x1);
Interceptor.attach(sub_8748,{
onEnter:function(args){
console.log("get into sub_8748:arg0->",hexdump(args[0]));
console.log("get into sub_8748:arg1->",16);
},onLeave:function(retval)
{
console.log("end into sub_8748:retval->",hexdump(retval));
}
});
var sub_D7EC=libnativebaseadd.add(0xD7EC).add(0x1);
Interceptor.attach(sub_D7EC,{
onEnter:function(args){
console.log("get into sub_D7EC:arg0->",hexdump(args[0]));
console.log("get into sub_D7EC:arg1->",hexdump(args[1]));
},onLeave:function(retval)
{
console.log("end into sub_D7EC:retval->",hexdump(retval));
hookStrcmp();
}
});
}

ollvm混淆的某apk题目的逆向分析的更多相关文章

  1. Android应用安全防护和逆向分析 ——apk反编译

    概述 最近一直在学习Android应用安全相关和逆向分析的知识.现在移动app在安全方面是越来越重视了,特别是那些巨头企业涉及到钱的应用,那加密程度,简直是丧心病狂,密密麻麻.从这里可以看出,对于应用 ...

  2. Android逆向分析(2) APK的打包与安装背后的故事

    前言 上一次我们反编译了手Q,并遇到了Apktool反编译直接crash的问题,虽然笔者很想在这次解决这个问题,但在解决途中,发现该保护依赖于很多知识,所以本次先插入一下,正所谓知其然知其所以然,授之 ...

  3. Android逆向分析(2) APK的打包与安装

    http://blog.zhaiyifan.cn/2016/02/13/android-reverse-2/ 2/18日增加对aidl和java编译的描述. 前言 上一次我们反编译了手Q,并遇到了Ap ...

  4. Android Studio(十一):代码混淆及打包apk

    Android Studio相关博客: Android Studio(一):介绍.安装.配置 Android Studio(二):快捷键设置.插件安装 Android Studio(三):设置Andr ...

  5. 一文了解安卓APP逆向分析与保护机制

    "知物由学"是网易云易盾打造的一个品牌栏目,词语出自汉·王充<论衡·实知>.人,能力有高下之分,学习才知道事物的道理,而后才有智慧,不去求问就不会知道."知物 ...

  6. 20145307陈俊达_安卓逆向分析_dex2jar&jd-gui的使用

    20145307陈俊达_安卓逆向分析_dex2jar&jd-gui的使用 引言 这次免考选择了四个项目,难度也是从简到难,最开始先写一个工具的使用 想要开发安卓首先要会编写代码,但是想要逆向分 ...

  7. [Android Security] Smali和逆向分析

    copy : https://blog.csdn.net/u012573920/article/details/44034397 1.Smali简介 Smali是Dalvik的寄存器语言,它与Java ...

  8. 20145307陈俊达_安卓逆向分析_Xposed的hook技术研究

    20145307陈俊达_安卓逆向分析_Xposed的hook技术研究 引言 其实这份我早就想写了,xposed这个东西我在安卓SDK 4.4.4的时候就在玩了,root后安装架构,起初是为了实现一些屌 ...

  9. 20145307陈俊达_安卓逆向分析_APKtools分析smail

    20145307陈俊达_安卓逆向分析_APKtools分析smail 引言 真刺激呢!到了第二篇博客了,难度开始加大,之前是简单的dex2jar和有图形界面的jd-gui,现在来隆重介绍强大的反汇编工 ...

随机推荐

  1. shell 正则匹配IP地址

    比如255.255.255.255 ,共4段,我们将255分为四个部分,0-99,100-199,200-249,250-255 0-99:[1-9]?[0-9]               #    ...

  2. 阿里云RDs 网络白名单 专用网络 经典网络

    云服务为了安全性总是有不同的安全规则,第一就是需要明白里面的网络类型   专有网络是您自己独有的云上私有网络.您可以完全掌控自己的专有网络,例如选择IP地址范围.配置路由表和网关等,您可以在自己定义的 ...

  3. Linux应用程序设计:用一种讨巧方式,来获取线程栈的使用信息

    面对的问题 对于线程的栈空间,相信各位小伙伴都不陌生.它有下面的这几项特性: > 1. 由操作系统分配固定的空间; > > 2. 使用一个栈寄存器来保存实时位置; > > ...

  4. java内部类与静态内部类对比

    内部类 静态内部类 有一个隐式引用,指向实例化这个对象的外部类对象 没有这个附加指针 不支持静态字段(language15) 支持哦 不支持静态方法 (language15) 支持哦 接口中的内部类自 ...

  5. ubuntu 20.04 编译安装 p 详解

    事情的起因 实验需要安装 p4 环境 我考虑到我自己的电脑性能不足,因此打算在本机安装 github上官方仓库的安装教程老旧,都是在 ubuntu14.04或者ubuntu16.04 我长时间用的li ...

  6. VMware虚拟机CentOS磁盘扩容

    版本信息: VMware Workstation 15 Pro  15.5.2 build-15785246, CentOS7 原虚拟机默认20G,安装东西多了,磁盘空间不够用, docker mys ...

  7. SLAM架构的两篇顶会论文解析

    SLAM架构的两篇顶会论文解析 一. 基于superpoint的词袋和图验证的鲁棒闭环检测 标题:Robust Loop Closure Detection Based on Bag of Super ...

  8. VB 老旧版本维护系列---迷之集合- ArrayList

    迷之集合- ArrayList '定义一个字符串 Dim dataType_ImageStr As String = "2023,2091,2092,2096,2212" '将字符 ...

  9. Jmeter(五十一) - 从入门到精通高级篇 - jmeter之运动战(详解教程)

    1.简介 运动战是一种军事作战方式,依托较大的作战空间来换取时间移动兵力包围敌方,以优势兵力速战速决,运动战的运用归为这样一段话"避敌主力,诱敌深入,集中优势兵力逐个击破".今天宏 ...

  10. 孟老板 BaseAdapter封装 (三) 空数据占位图

    BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ...