自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lilac的博客

分享改变世界

  • 博客(51)
  • 收藏
  • 关注

原创 【无标题】

Android Native 字符串解密

2023-02-17 14:46:34 5848 6

原创 第三讲——确认关键要素之导论

一、引言(源)代码实现是算法自身的投影,IDA F5伪码是模糊化的投影,混淆技术导致了扭曲化的投影。在扭曲、模糊的投影里快速还原算法,依赖于对算法本身的深度理解。二、主题首先抄第一讲的例子,假设sub_137AD 是AES算法,那么所需确认的关键要素如下加密 or 解密过程明文内容密钥长度及内容分组模式IV明文填充方式在实际分析中,很多人无法确认全这些关键要素,就会发现解密结果对不上,转而认为算法被魔改或直接放弃,这是很糟心的。我们不妨以AES作为起点,好好学一下这个知识,首先解释

2022-02-16 09:53:44 1442 4

原创 第二讲——识别加密算法

一、引言如何识别加密算法?这个问题很朴素,建议工作日带薪如厕看。二、主题在大约2000年的时候,一个研究人员发现,大部分加密算法,在实现里使用了固定常数或固定表。举几个例子,如下是MD5伪代码// : All variables are unsigned 32 bit and wrap modulo 2^32 when calculatingvar int s[64], K[64]var int i// s specifies the per-round shift amountss[ 0

2022-02-15 22:25:53 4431

原创 第一讲——密码学系列我们讲什么

第一讲——密码学系列我们讲什么一、引言一本红楼梦,经学家看见《易》,道学家看见淫,才子看见缠绵,革命家看见排满,流言家看见宫闱秘事。密码学是个高深的主题,不同需求和视角,其状貌迥然不同。本系列文章仅关注Android SO逆向中所关心的一部分密码学知识,其余不予考虑。二、主题想做算法还原,就离不开对加密算法的深入理解。我们的需求可以细分为如下几块。第一部分:如果样本使用经典的加密算法时,我们应当能识别它。经典加密算法:MD5/SHA1/HMAC方案/AES/DES/RSA/SM4/TEA/C

2022-02-14 20:12:29 2658

原创 Unidbg杂谈

Unidbg的功能可以分成两大块模拟执行辅助算法还原模拟执行的所有任务,一言以蔽之,就是补环境,补环境并不是一件容易的事,我总结一下常见情况。首先是JNI这个桥梁相关的补环境问题1.样本存在初始化函数,研究者没有意识到这个问题就会出大问题(好吧我是废话大王),参考资料:《csdn 样本七》 https://blog.csdn.net/qq_38851536/article/details/118000259知识星球 《Unidbg初始化》目前的五节视频2.MethodID问题

2021-09-14 14:02:31 5034 1

原创 Unidbg系列总结

关于Unidbg基础内容的介绍基本全面了,个人感觉这系列文章还是不错der。后续的绝大多数文章、视频放知识星球和课程中,课程之后出,因为感觉现在能力害欠缺。知识星球现在就可以加了,知识星球主打基于Unidbg的模拟执行与算法还原。内容主要来自三部分现有内容的重新制作,不少人反映”可以更仔细一些“,说实话,不少文章都有前置知识和基础要求,所以系列文章会再精心的重新制作,以文章或者视频的方式和大家在知识星球再次见面不断更新的新文章,以SO层实战为主题,每周一篇左右,质量不低于这一系列文章,我们的目标是

2021-07-24 17:23:15 5104 4

原创 SO逆向入门实战教程十:SimpleSign

一、前言这是系列的第十篇,通过该样本可以充分学习如何在Unidbg中补充环境。朋友zh3nu11和我共同完成了这篇内容,感谢。二、准备首先我们发现了init函数,它应该就是SO的初始化函数,其余的函数看名字也都很易懂。三、Init 模拟执行我们首先用Unidbg跑通Init初始化函数,先搭建基本框架package com.article10;import com.github.unidbg.AndroidEmulator;import com.github.unidbg.Module;

2021-07-01 20:34:35 6197 11

原创 为什么Unidbg模拟执行的结果和主动调用的结果不同(一)

一、前言前言打个广告,Unidbg有很多实操问题,文章说起来不直观而且费劲,最典型的就是怎么补JNI环境,很多朋友都补的又慢又折腾,欢迎大家私信了解七月的Unidbg课程,课程我主讲,而且由我的老板,逆向大牛R0ysue指导设计,大可放心。除此之外,建了一个Unidbg学习交流群,纯粹的技术交流,欢迎各位大佬来玩,私聊我拉进群。接下来进入正题,看文章标题大家也能猜到,这一篇的内容是一个新系列的开始,这并不意味着《逆向十三篇》结束了,而是Unidbg模拟执行的结果和主动调用的结果不同这个问题太过重要了,

2021-06-29 14:53:05 4500 6

原创 一个Unidbg使用中遇到的奇怪问题

一、问题提出在《SO逆向入门实战教程七:main》我们讨论了一个样本,一位读者朋友给我提出了问题:有另一个同系的应用,也使用了样本SO,但是在其初始化函数中,流程略有不同,并会最终导致Unidbg在一个函数中死循环。样本和代码详见百度网盘二、问题解决我花了数个小时分析样本,依然找不到问题根源,但在无意的一次测试中发现,当使用HookZz对死循环发生的函数中某些位置inline hook时(无需修改任何内容),死循环就不复存在并恢复到正常执行流,并能顺利模拟执行。样本对Unidbg的检测吗?我认为概

2021-06-24 10:05:06 2513 2

原创 Unidbg参数传递时一个常见的坑

一、问题描述本篇描述一个常见且隐蔽的坑,新手很容易一头雾水。我写了个demo,里面包含两个方法。快来看看吧!JAVA代码package com.roysue.test623;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.TextView;

2021-06-23 12:08:01 5305 9

原创 Unidbg 问题汇总(一)

1.Long参数的传递假设一个native函数中参数是long类型,比如这样在编译成arm32的SO时,一定概率会被转成两个int.long a = 0x1000L → int a1 = 0,int a2 = 0x1000在Unidbg主动调用时,一定要记得处理,否则会出问题.这是一个常见问题,JAVA层传入的时间戳,常常就是jlong.处理办法有21是按照SO的情况,传给它两个int2是按照传入诸如 long tm= 1621265630L;的标准写法,Unidbg自动帮我们分割成两个

2021-06-22 23:50:59 4805 3

原创 SO逆向入门实战教程九——blackbox

文章目录一、前言二、准备三、Unidbg模拟执行四、Unidbg算法还原五、尾声一、前言上篇中,我们借AB之口,讨论了这样一个问题——Unidbg是否适合做算法分析的主力工具,这个问题没有标准答案,但我们会通过一系列样本探讨它,时间会证明一切。这一篇中,我们以Unidbg为主力工具去分析一个难度适宜的算法。坦白说,这篇的阅读体验不是特别好,原因来自两点:文章这种形式很难保证分析的连贯性这篇有前置知识要求视频的形式才是最好的,而且我也需要一份收入,如果有朋友同侪想报名我即将开课的Unidbg课程

2021-06-22 21:24:27 6700 15

原创 Unidbg适合做算法还原吗?(一)

Unidbg是模拟执行的强大工具,这是毋庸置疑的,可是,它在算法还原上是否依然是得力的助手?或者说,当我们想要对一个样本进行算法还原而非模拟执行呢,需要关注Unidbg吗?我们看一下AB两人的辩论,他俩会进行数篇的辩论,客官也可展开思考,发表和交流看法。A:Unidbg在算法模拟执行上很有用,但算法还原上用它纯属画蛇添足。B:为什么这么觉得?A:先看第一种情况——目标SO比较简单,这种情况下,IDA中静态分析样本,再Frida Hook一下样本中主要的函数,就能七七八八明白逻辑了,何苦在Unidbg

2021-06-20 19:42:50 4550 10

原创 SO逆向入门实战教程八:文件读写

文章目录一、前言二、demo1设计三、Unidbg模拟执行demo1四、demo2设计五、Unidbg模拟执行demo2六、尾声一、前言本篇分析的是自写demo,帮助大家熟悉Unidbg中对文件读写的处理,例子中主要涉及Sharedpreference 读写Assets 读写文件 读写二、demo1设计Sharedpreferences是Android平台上常用的存储方式,用来保存应用程序的各种配置信息,其本质是一个以“键-值”对的方式保存数据的xml文件,其文件保存在/data/dat

2021-06-18 13:33:19 3962 11

原创 SO逆向入门实战教程七:main

一、前言一个较好的综合性样本。本篇抛砖引玉分析一下。二、准备这是我们的目标方法参数1是203参数2是一个对象数组9b69f861-e054-4bc4-9daf-d36ae205ed3e (String)GET /aggroup/homepage/display __xxxxx(byte数组形式)2 (int包装类)三、Unidbg模拟执行首先搭一个架子package com.lession10;import com.github.unidbg.linux.android.dv

2021-06-17 19:33:48 8751 23

原创 SO逆向入门实战教程六:s

文章目录一、前言二、准备三、Undibg模拟执行四、算法还原五、尾声一、前言第六篇,主要内容是简单JAVA环境的填补。二、准备如图红框是我们的目标函数,入参是sortedMap接口的实现类对象,比如TreeMap对象,返回值是SignedQuery类对象。参数和返回值都比较特殊,不是我们前面处理过的基本类型和对象,所以举个例子,这是Frida 的callSign代码// Call Sign 函数function callsign() { Java.perform(function.

2021-06-15 14:41:56 6959 17

原创 当我们谈论Unidbg时我们在谈什么

文章目录一、前言二、使用Unidbg的工作量是什么三、补环境补的是什么3.1 运行环境缺失3.2 上下文缺失四、Unidbg 不是所有情况下最优的解决方案五、Unidbg在大多数情况下是好的方案六、Unidbg和风控无关七、尾声一、前言这是一篇漫谈Unidbg的文章,我对Unidbg的使用和理解都还很浅,日后会更新或修改看法,欢迎大佬指点,也期待同侪讨论。二、使用Unidbg的工作量是什么我们常规使用Frida + IDA的动静态分析中,工作可能是这样的找线索→Frida Hook验证→验证成功继

2021-06-15 10:01:24 4691 10

原创 SO逆向入门实战教程五:qxs

文章目录一、前言二、准备三、Unidbg模拟执行四、算法还原五、尾声一、前言久违了,这是SO逆向实战教程的第五篇,最近忙于即将开讲的Unidbg课程内容的设计,所以疏忽了博客的更新,这篇的重点是一个MD5的炫技操作,需要对哈希算法原理有较深理解,本篇中不讲算法原理(可以自己看文档,或者看我在SO基础课里对MD5算法的手算),不懂算法原理的话,看起来一头雾水。侧重新工具、新思路、新方法的使用,算法分析的常见路子是Frida Hook + IDA ,在本系列中,会淡化Frida 的作用,采用Unidbg

2021-06-11 23:41:32 6513 21

原创 SO逆向入门实战教程四:mfw

文章目录一、前言二、准备三、Unidbg模拟执行四、算法还原五、尾声一、前言这是SO逆向入门实战教程的第四篇,上篇的重心是Unidbg的补环境以及哈希算法的简单魔改,本篇的重点是使用Unidbg中对魔改程度较深的加密算法进行分析。侧重新工具、新思路、新方法的使用,算法分析的常见路子是Frida Hook + IDA ,在本系列中,会淡化Frida 的作用,采用Unidbg Hook + IDA 的路线。主打入门,但并不限于入门,你会在样本里看到有浅有深的魔改加密算法、以及OLLVM、SO对抗等内容

2021-06-04 10:01:33 6123 12

原创 SO逆向入门实战教程三:V2-Sign

文章目录一、前言二、准备三、Unidbg模拟执行四、算法还原五、尾声一、前言这是SO逆向入门实战教程的第三篇,上篇的重心是Unidbg的Hook使用,本篇的重点是如何在Unidbg中补齐JAVA环境以及哈希算法的魔改。侧重新工具、新思路、新方法的使用,算法分析的常见路子是Frida Hook + IDA ,在本系列中,会淡化Frida 的作用,采用Unidbg Hook + IDA 的路线。主打入门,但并不限于入门,你会在样本里看到有浅有深的魔改加密算法、以及OLLVM、SO对抗等内容。对样本.

2021-06-03 20:19:18 9156 26

原创 SO逆向入门实战教程一:OASIS

文章目录一、前言二、准备三、Unidbg模拟执行四、ExAndroidNativeEmu 模拟执行五、算法分析六、尾声一、前言这是SO逆向入门实战教程的第一篇,总共会有十三篇,十三个实战。有以下几个注意点:主打入门级的实战,适合有一定基础但缺少实战的朋友(了解JNI,也上过一些Native层逆向的课,但感觉实战匮乏,想要壮壮胆,入入门)。侧重新工具、新思路、新方法的使用,算法分析的常见路子是Frida Hook + IDA ,在本系列中,会淡化Frida 的作用,采用Unidbg Hook + .

2021-05-31 16:03:19 17444 29

原创 Android逆向中的各种tracer

JAVA层正向开发中的trace工具:DDMS永远的神,从很久以前到现在都有人用,这个工具说不上好坏,就挺牛的。XPOSED TRACER使用Xposed 编写插件,HOOK 所有JAVA调用,以前见过,比较容易崩溃,现在应该几乎没人用了。Zentrace基于Frida构建的trace脚本,非常优雅,大部分时候很好用,现在也依然是选择之一。Dwarf稳定性好像不太行,我也没摸过几次Objection和r0trace基于Frida构建,应该是现在Java层分析和trace的主力工具。F

2021-03-22 16:20:38 2970 7

原创 Native逆向指北(一)——BiliBili Sign

Native逆向指北之BiliBili Sign一、前言二、背景介绍三、分析3.1 定位native函数位置3.2 JNItrace辅助分析3.3 IDA分析四、总结一、前言哈哈,用这个显眼的好位置说一下闲话1.有没有杭州的大佬招小弟,Android逆向方面的,只会Java层和不难的Natvie层,抱抱我。2.为什么这么久不写文章:去年忙考研,失败了,打算重拾逆向技能,冲冲冲。3.为什么叫“逆向指北”,因为我的水平很一般,远远称不上能给大家分享一些真正的知识的地步,可能不仅没法指南还会南辕北辙,所

2021-02-28 20:28:26 7554 7

原创 饱和式救援(一)

起因最近极其烦躁,事业生活都不顺畅。对我而言,时常感觉Android逆向教程和实操之间存在巨大鸿沟,或者说理论和实践之间存在至少10层闪电五连鞭,以至于现在到了看Android逆向的好文章,即觉得美妙,又有些烦躁,烦躁中还带着酸味儿。美妙的感受来自作者破解和分析的行云流水,天马行空,作者简直是福尔摩斯中国分斯,一篇长文章看下来让人觉得酣畅淋漓,高潮迭起。烦躁和酸的感受来自如下:真的有这么丝滑吗?他娘的怎么想到这一步的?这个思路这么美,严丝合缝,简直毫无瑕疵,他怎么做到的?这些工具我也都或多或少听

2020-12-27 10:14:43 2193 8

原创 Frida和调试器共存的问题

当我们希望同时使用调试器与Frida时,这个问题就会出现——似乎无法同时使用调试器(诸如IDA,GDB)和Frida。这会带来一些不便,先说一下两者一同使用的好处:IDA调试时,我们往往需要对App进行下拉、刷新、点击等操作从而触发需要调试的函数,很难保证每次情景都能复现(因为入参不同),也可能业务逻辑跑了好几圈才到我们的目标函数,很麻烦,调试时App还有失联的问题(手机以为App卡了,傻不拉几...

2020-03-25 22:33:45 4035 2

原创 Frida开发环境搭建记录

一、Frida在安装时容易出现网络状况,建议使用镜像源,不要用豆瓣源先pip install frida-tools --user,因为tools会一并尝试安装frida二、Frida在开发中会遇到各种问题,我主要遇到三个问题frida版本和frida-server版本问题,手机上的server版本和电脑上的frida版本不一致也没关系,可以正常运行。但由于frida版本更新极快,...

2020-03-16 19:21:59 8561 7

原创 2020-3/8

天气:阴,小雨发现好多东西都不懂,群里今天在谈论双向验证,ssl_log,Hook什么之类的东西,可是我什么都听不懂,明天看图解HTTP。

2020-03-08 23:26:27 658 2

原创 学习笔记——Android逆向中快速定位关键代码

给自己新增一个任务,每天学习和记录一篇Android逆向相关的文章。今天分享的是《OPPO安全应急响应中心》公众号里的一篇文章——移动APP测试中关键代码定位思路明确,干货不少,现在App防护的整体难度越来越大,单纯静态分析掉头发太多,因此都是动静态结合。静态分析即使用Jadx反编译App(最新版Jadx好用又不占内存),动态分析过去用Xposed,但现在多半用Frida,因为Frida强大(...

2020-03-04 13:10:56 4268 4

原创 Dwarf调试器介绍

Dwarf介绍Dwarf是一个基于Frida开发的调试器,它继承了Frida敏捷、优雅、支持多平台的特性,而GUI界面则是基于PYQT5构建。它具有强大的静态分析能力(基于Radare2和Unicorn),以及强大的动态分析能力(Frida提供的各种API),且扩展性很强,可以安装插件,更新也很快,作者是极其靠谱的iGio90,因此值得尝试和使用。项目地址:https://github.com...

2020-03-03 12:55:25 3077 5

原创 介绍ARM汇编(1)

ARM笔记内容主体来自于Azeria的ARM汇编系列文章、 Carl Burch 的ARM介绍文章等等。https://azeria-labs.com/writing-arm-assembly-part-1/http://www.toves.org/books/arm/一、背景介绍把关键代码放在So中,已经是Android应用安全防护的主流,Java层用JADX等反编译工具可以得到与...

2020-01-10 23:21:31 2222 10

原创 基于Frida的工具介绍——ZenTracer

Zentracer介绍Zentracer是葫芦娃大佬写的Tracer工具,它基于Pyqt+Frida开发,短小精悍。1.安装Zentracerhttps://github.com/hluwa/ZenTracer 下载即可2.使用场景在逆向分析的过程中,因为经常要面对海量的代码,往往都会尝试很多小技巧来准确高效的定位关键点,tracer就是其中之一。Tracer顾名思义就是用来追踪代...

2019-12-29 17:38:38 6597 8

原创 IDA F5堆栈不平衡的处理

IDA F5堆栈不平衡的处理1.引出问题F5时出现如图错误,一般是程序代码有一些干扰代码,让IDA的反汇编分析出现错误。比如用push + n条指令 + retn来实际跳转,而IDA会以为retn是函数要结束,结果它分析后发现调用栈不平衡,因此就提示sp analysis failed.我们选择抖音老版本的libcms.so作为分析案例,假设Java代码如下static { Sy...

2019-12-29 16:43:11 5343 9

原创 基于Frida的工具介绍——Objection

Objection 介绍objection是一个基于Frida开发的命令行工具,它可以很方便的Hook Java函数和类,并输出参数,调用栈,返回值。1.1 安装Objectionpip install objection1.2 启动Objection保证Frida server开启命令行输出objection -g packageName explore即可进入obj...

2019-12-29 14:14:59 21582 5

原创 无题

何以遣有涯之生

2019-09-11 22:53:20 901 10

原创 IDA实用脚本Jni_helper的使用

今天介绍一个IDA脚本使用方法——非虫大佬的Jni_helper,非常简单好用 https://github.com/feicong/jni_helper 。源代码是采用py2写的,如果你是py3的环境可以稍微修改,也可以直接使用我网盘的文件。链接:https://pan.baidu.com/s/1rzfceTY0x9UbdOoza4zN1g提取码:eca1操作步骤1.Jadx反编译Ap...

2019-09-03 13:14:14 2177 11

原创 Android逆向入门7——Smali语法学习(2)

我亲爱的三五读者,Smali语法讲解过的人已经太多了,而且前辈们讲的都很好,或许我没有必要再做重复的工作,我想把笔墨更多的投入在有差异化,更体现教程价值的地方。所以我们这一节中换一种方式学习Smali语法。一、博客推荐https://blog.csdn.net/wdaming1986/article/details/8299996https://www.jianshu.com/p/ba9b3...

2019-09-01 19:23:39 1556 9

原创 Android逆向入门7——Smali语法学习(1)

这一节我们一起探讨smali语法和smali在Android逆向中的应用,它是Android逆向世界中不可或缺的一部分。简单的来说,Dex反编译的结果就是Smali,Smali和dex之间的关系,我们常常称为转化(convert);Dex是晦涩的二进制文件,Smali是人可以读懂的代码,而Jadx等工具就是解析Smali文件,翻译成Java代码,其中准确度差了不止一个档次了。这一块儿我用问与...

2019-08-31 18:26:08 2267 5

原创 Android逆向入门6——定位到小红书Sign算法

在上一节中,我们猜测小红书自定义了一个拦截器,给每条请求添加了DeviceId、Timestamp等等字段,以及我们心心念念的sign字段。这一节我们顺着这个思路去尝试定位sign,看看猜测是否有误。一、寻找拦截器的特征添加一个拦截器很简单,只需要实现Okhttp的Interceptor接口,并重写其中的intercept方法即可。这么说可能过于抽象,而且对Java基础有一些要求,你可以百度...

2019-08-31 10:32:30 12241 27

原创 动态分析Android App之动态调试

动态分析Android App之动态调试这个系列一共有五篇左右,内容主要介绍如何动态分析和调试Android App,和网上其他教程相比,内容更充实,体系更健全,深入而浅出。闻道有先后,术业有专攻,希望能给刚入门Android逆向的同侪们些微帮助。出于各种原因,文章有两个遗憾,一是只包含了Java层代码的动态分析和调试,Jni和Native层并没有涉及;二是对Hook框架的介绍和使用不是很充分...

2019-08-24 18:36:38 14682 24

原创 漫谈爬虫工程师如何入门Android逆向

背景这篇文章写给Python爬虫工程师们,互联网行业的处境越来越艰辛,流量越来越涌向移动端,爬虫和反爬的攻防不断升级,这一切的一切,都让我们只能一刻不停的学习新技能,才能保持竞争力和养家糊口(一群单身狗,挣的钱连自己都养不活) 。App逆向不断出现在爬虫工程师的日程表里,可是到底该怎么入门App逆向呢?这篇文章就是漫谈App逆向的学习,主要分成三个部分。1. 指出一些自学的误区2. 同时...

2019-08-10 15:20:26 3077 22

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除