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. UCOS 多任务系统中需要注意的地方 一个任务至少要有一些执行内容

    图片说明: 在一个TASK的最外层FOR();中  如果有调用BREAK会怎样??

  2. 2017-11-20 崂应工作总结,含LTC3780模块分析,含运放原理

    学习了运算放大器的分类 运放的单点输入 差动模式 共模抑制输入模式 反相位比例运放 正相比例运放 电压跟随器 运放的放大比例计算 LTC3780模块的原理 因为: R19  这个电阻不确定他的接法 暂 ...

  3. MVC、MVP和MVVM的区别

    前言 在web1.0时代时,那个时候程序猿还没有前后端之分,更程序员开发的时候,都是要前后端一起写的,前后端的代码都是杂揉在一起,如图下 这种开发模式的话,开发的时候因为不需要和其他人员沟通协作,前后 ...

  4. JMicro微服务之超时&重试

    JMicro是本人开发的基于Java实现的微服务框架,当前正式版本为0.0.3,并已发布到maven中央仓库.项目源码github:https://github.com/mynewworldyyl/j ...

  5. Nextcloud 使用教程

    一.简介 Nextcloud是一个网盘式文件管理系统,多用户权限管理,多客户端,使用简单.可在浏览器中运行,也可下客户端,不论使用哪种方式运行,使用教程都是一样的. 只是在客户端中运行时能及时收到相应 ...

  6. 我眼中的WebViewJavascriptBridge(图解)

    工作中涉及到一段时间iOS开发,在开发中有个小小的框架让我非常深刻,就是WebViewJavascriptBridge,用于原生控件与前端交互通信.我觉得WebViewJavascriptBridge ...

  7. 智能物联网(AIoT,2020年)(中)

    智能物联网(AIoT,2020年)(中) 05 中国AIoT产业图谱 06 中国AIoT商业模式 标准程度越低人力和时间成本投入越多,2B2C模式附加值高 07 中国AIoT玩家分布简介 四类玩家,优 ...

  8. TensorRT 数据和表格示例

    TensorRT 数据和表格示例 TensorRT 7.1在绑定索引方面比其前身更加严格.以前,允许错误配置文件的绑定索引.考虑一个网络,该网络具有四个输入,一个输出,以及在其中的三个优化配置文件 I ...

  9. JUC 并发编程--07 阻塞队列版本的 生产者消费者(不使用synchronized和 lock),也有一些疑惑,最终解惑

    直接上代码: 前提是你已经 熟悉了原子类,volatile,和阻塞队列 public class JucPCdemo03 { /** * 阻塞队列的应用: 这里实现的生产者消费者,生产一个消费一个 * ...

  10. 编译原理-文法(G)和语言(L)

    1.设文法G2(S): S->AB A->aA|a B->bB|b G2(S)产生的语言是什么? 解:L(G2)={ambn|m,n≥1} 2.请给出产生语言为{anbn|n≥1}的 ...