自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(79)
  • 收藏
  • 关注

原创 ARM64汇编0C - inlinehook

本文是ARM64汇编系列的完结篇,主要利用前面学过的知识做一个小实验完整系列博客地址:https://www.lyldalek.top/article/arm这里只讨论 ARM64 下的 inlinehook,做一个简单的demo,只是抛砖引玉,有兴趣了解更多细节的可以去查找资料,看开源项目。ARM64 相比 ARM 的 inlinehook 要麻烦不少,因为有很多指令都没了,且无法直接访问 PC 寄存器。

2024-06-20 12:14:02 722

原创 ARM64汇编0B - 函数调用约定

建议先看《CSAPP》的3.7节,讲的很细。我们这里就直接看例子来分析了。

2024-06-20 12:10:14 527

原创 常见加密算法05 - 分组密码AES

​各位眼光独到,学贯中西的读者们,你们好啊!今天我们讨论一下AES算法及其识别。虽然DES算法的分组大小是64位,但是由于DES算法的密钥长度只有56位,因此DES算法存在着弱点,容易受到暴力破解和差分攻击等攻击手段的威胁。因此,在实际应用中,DES算法已经不再被广泛使用,而被更加安全的算法所取代,如AES算法等。为了强调大于56位密钥对高强度安全的重要性,RAS数据安全(RSA Data Security)从1997年早期就发起了一系列的DES攻击竞赛。

2024-06-20 12:07:05 441

原创 ARM64汇编0A - thumb模式与IT块

本文主要讨论一下 32 位程序下的 thumb 模式相关东西,属于选读内容。

2024-06-03 10:25:44 887

原创 常见加解密算法04 - 分组密码DES

DES算法,全称是数据加密标准(Data Encryption Standard),是一种对称密钥加密技巧,也就是说,加密和解密都用同一个密钥。它是分组加密算法。分组肯定要补位,关于补位的知识,我们后面再说。

2024-06-03 10:22:53 920

原创 常见加解密算法03 - RC4逆向认识

各位聪明绝顶,才高八斗的读者们你们好!今天我们主要讨论编译之后的RC4算法识别。题外话,之前看到一个蛋疼的小知识,说“势”这个字最好不好查词典释义。我是很好奇的,果然后来无法直视势不可挡这个成语。言归正传,我们将上一篇的Java与C的代码都编译一下,分别反编译看看。

2024-05-14 13:07:44 1074

原创 常见加解密算法02 - RC4算法分析

RC4的好处是它很简单,很快,在没有密钥的情况下只能使用暴力破解。所以,你的密钥很重要,你得特别小心使用它。

2024-05-14 13:05:22 697 1

原创 ARM64汇编09 - 分支指令与模式切换

本文主要讨论两部分内容:分支指令,B、BL 等v7中的模式切换,arm切thumb,thumb切arm。理解了模式切换就会明白为什么在做 inline hook 时,有些地址需要加上1,加上 1 的作用是什么。

2024-05-14 13:02:12 871

原创 常见加解密算法01 - 初步认识

安全的加密方法会有大量的加密密钥,因此未经授权的人员既无法猜出正确的密钥,也无法使用计算机通过尝试每个可能的组合(称为暴力破解)轻松计算出正确的字符串。了解了BASE64的原理,那BASE32也就好理解了,它就是使用32个可见字符做编码表,然后是5个bit作为一组,也有填充。注意,这里使用 12.8.0 版本的 frida 来执行,15.2.2的在 cli 里面找不到函数,需要再研究研究。so里面方法不多,可以一个一个看过去,看谁比较可疑,也可以直接搜索编码表字符串,当然也有可能遇到字符串加密的情况。

2024-03-21 13:36:17 811

原创 ARM64汇编08 - 块访存指令

armv8 里面似乎没有了 v7 中的块访存指令,就是一次性访问一块内存的指令。我们还是先介绍下 v7 中的块访存指令。

2024-03-21 13:27:55 534

原创 ARM64汇编07 - 访存指令

访存指令是ARM64汇编语言中的一部分,涵盖了数据访问和内存操作的指令。这些指令使处理器能够与内存进行交互,包括读取数据、写入数据以及执行其他内存相关的操作。理解这些指令对于理解处理器如何与内存交互以及如何管理数据至关重要。访存指令介绍两个:ldrstr。

2024-03-21 13:25:11 1196

原创 ARM64汇编06 - 基本整型运算指令

将 Xn 与 imm 相加,结果赋值给 Xd,imm 是无符号数,范围为 0 - 4095。shift 是对 imm 进行移位,shift 为 0 的时候,表示左移 0 位,即不变。shift 为 1 的时候,表示左移12 位:由于 imm 有效位只有 12 位,所以无法表示 0x1234 之类的数,但是可以表示 0x123。且有左移操作,所以也可以表示 0x123000 之类的数。

2024-03-12 13:08:55 1185

原创 ARM64汇编05 - MOV系列指令

由于ARM64指令集是定长的4字节指令,这就决定了它无法在指令里面描述一个任意的数字,比如:0x123456789,这个就无法在指令中表示。看其 hw 对应的位是 01,所以需要将 0x8000左移 1*16 位,得到 0x80000000。这种 mov 指令还是比较常见的,但是由于指令的限制,它只能描述16位的立即数。所以,Rd 的值是 0,表示 X0 寄存器,Rm 的值是1,表示 X1 寄存器。MOV 有个别名指令,ORR,它可以用到 shift,imm6,Rn的值。

2024-03-12 13:04:41 1188

原创 ARM64汇编04 - 条件码

关于分支控制与条件码的作用可以去看 《CSAPP》的第 3.6 节,讲的非常清楚,建议看看,这里就不重复了。编译后,使用 ida 打开,查看其核心逻辑:1处的 w19 与 w20 储存着 a 与 b 的值,CMP 会对这两个值做比较。cond 是有一个表可以查的,我们后面会说。这个指令的意思是,如果 cond == true,Xd = Xn,否则 Xd = Xm。2 处的 CSEL 指令的意思是如果 LT 的值是 true,那么 x8 = x9,否则 x8 = x8。x9 的值是 b win。

2024-03-07 09:44:54 1409

原创 ARM64汇编03 - PC寄存器

本文主要讨论 pc 寄存器的一些行为。我们使用前文编译的 arm32 程序来做实验,由于 arm64 里面已经没有了mov pc r0这样的指令,无法直接对 pc 寄存器进行读写操作,所以只能采用 arm32 来演示。

2024-02-29 13:18:46 1075

原创 ARM64汇编02 - 寄存器与指令基本格式

最近的文章可能会有较多修改,请关注博客哦。

2024-02-29 13:15:52 1403

原创 ARM64汇编01 - 环境搭建

这是非常有必要的,因为所有的编译文件都在同一个GUN MKAE执行环境中,所有的变量都是全局变量,不清除容易引起解析错误。LOCAL_ARM_MODE:默认情况下,构建系统会以 thumb 模式生成 ARM 目标二进制文件,其中每条指令都是 16 位宽,并与。现在的应用在googleplay与国内商店的推动下,都已采用了 arm64-v8a,所以我们可以不用太关心 thumb 指令了。前面我们说了,这个选项是用来表明生成的目标文件里面,它的汇编代码是使用 arm 还是 thumb 指令。

2024-01-19 11:00:08 915

原创 ELF解析06 - 入口参数与傀儡进程

04 里面的重定位表没讲完,这里继续,我们说过重定位的类型有很多,04 里面基本只介绍了一种,就是 plt 表。重定位不仅仅发生在代码里面,还会发生在数据里面,比如so程序里面对一些全局变量的引用,它们的重定位信息是放在另外一个表里面:对应 section 的:里面的结构体与 rela.plt 的结构体是一样的。以第一项为例:0x05D690 表示符号地址。0x0403 表示符号重定位类型。由于它不属于符号表,所以索引为0。所以,我们只需要在这个位置按照上面的方式计算好地址填进去就行。

2024-01-18 11:21:21 423

原创 ELF解析05 - hash表

这个表叫 hash 表,它的作用是用于快速索引符号在符号表中的位置。先看一张图:查找一个符号的位置步骤如下:首先,计算出符号字符串的 hash 值然后,根据 hash 值获取 bucket 索引 indexbucket[index] 里面储存的是符号表的 index,但是由于 hash 冲突问题,所以又建立了一个 chain 来当链表结构。chain 里面储存的是符号的 hash 值,但是只使用了前 31 位,后 1 位是用于表示该链表是否结束,。

2024-01-17 10:21:44 1211

原创 ELF解析04 - 字符串表/导入库表/符号表/导入表

本文主要讨论 里面的几个子表。我们先总体看下 :这里我们只需要关心图中两个画圆圈的地方。由于 的子表内容都在可加载段的范围里面,所以对这些子表的访问都是在虚拟内存里面进行的。 这个值我们可以自己静态分析使用,但是解析的时候不要用这个地址。包括 ,这些值都没用。有一个需要注意的地方,就是 的值要比 的值要大一个 PAGE 值。这是为啥呢?是因为第二个可加载段的映射偏差:可以看到在第二个可加载段在做内存映射的时候就有一个 PAGE 值的偏差,由于只要是放在第二个段里面的内容,就会有一个 PAGE 的

2024-01-12 09:52:11 1066

原创 Notion 搭建个人博客

之前使用过很多搭建博客的系统,比如Hexo等,但是用起来还是很麻烦,比如上传图片之类的。所以,想了一个折中方式,那就是使用链接的方式,个人博客里面只放链接,链接再转到我的笔记,这样算是一个汇总吧,也还行,而且,notion本身发布后,支持评论,非常不错。这就让我不是很爽,因为我本来就有自己的一套笔记放置规则。虽然公众号上的文章基本是与我的笔记同步的,但是公众号没法大量且多次修改,而笔记总是会随着年月而更新的,这是一个硬性需求了。而且,要是 copy 一份,后面笔记更新,我得维护两份,太麻烦。

2024-01-12 09:46:26 525

原创 ELF解析03 - 加载段

本文主要讨论 mmap 函数以及如何使用 mmap 函数来加载一个 ELF 的可加载段。

2024-01-12 09:38:43 1006

原创 ELF解析02 - linker

01里面,我们看到了修改后的 ls 程序在 maps 里面的布局:在 01 里面,我们说到,r—p 这个段是一个 padding 段,但是实际上不是的。这个显然是对应的:这个段的权限标志是r--,这个与010中两个可加载段都不匹配,这是为啥呢?其实,这个段是010中第二个可加载段的一部分,只不过它的权限被修改了。是被下面这个段修改的:这个段描述的就是,在 elf 被重定位之后,将虚拟位置 5D660 且大小为 10656 字节的区域的权限改成只读的。我们算一下:且由于4kb对齐,所以。

2024-01-05 15:42:52 1012

原创 ELF解析01 - ELF头和程序头

我们可以做一个实验,将 section header 部分全部使用 EE 覆盖,push 到手机上,是依然可以运行的。覆盖完之后,将该程序使用 ida 打开,发现 ida 根本解析不了,这是因为 IDA 是依靠 section 来解析的。实际上加载一个 so 文件的时候,ida 的 segment view 里面就是解析的 section header。

2023-12-29 12:04:35 1064

原创 xposed 05 - so函数hook

本文讨论如何hook目标apk中的 so 中的函数。实现 so hook 的一个主要思想,就是将目标apk当成是我们自己编写的就行,就像开发中hook系统调用一样。有了这个思维,思路会宽广许多。

2023-12-28 11:45:11 1738

原创 xposed 04 - 方法调用与加壳app处理

上面说的这个方法还是比较通用的。只要找准classLoader,对加壳app的hook也不难。

2023-12-27 11:18:33 1323

原创 xposed 03 - hook字段与一般方法

本文主要讨论一下如何hook字段与方法hook字段有两种方式:使用反射使用 xposed api由于xposed 模块也运行在 app 进程中,所以我们可以将 app 的代码当作自己的,直接反射访问。

2023-12-26 09:41:21 794

原创 xposed 02 - 模块编写与构造函数Hook

本文讨论一下xposed模块编写的步骤,与如何hook构造函数,以及一些需要注意的地方。

2023-12-25 10:41:29 1364

原创 xposed 01 - 环境搭建

Xposed的作者是rovo89,但是更新完 8.1 的 beta 版之后就不更新了。由于Android新版本的普及,目前新上市的手机基本都是8.0以上。所以Xposed框架已经不适用。EdXposed团队成为Xposed停止更新后的官方接任者。当然现在有更好的 LSPosed https://github.com/LSPosed/LSPosed,这个我们后面开一个系列。

2023-12-22 11:32:22 1232

原创 Frida07 - dexdump核心源码分析

文件头里面有一个 map_off 字段,它的值是 map_list 段在dex文件内的偏移。可以看到,逆向的重心,除了api用的熟之外,还需要对app本身的相关知识要有足够的了解才行。作者设置的比较宽泛,中间的两个字节表示的是 dex 的版本号,会搜索所有版本号的 dex。,coalesce 的值表示是否需要合并相同权限的内存段,默认是 false。这里也储存了自身的一个偏移,那么根据这两个东西,就可以认为这个是dex文件。比如,0x3c位置的字节必定是 0x70,因为文件头后面跟着的就是字符串。

2023-12-22 11:27:27 969

原创 Frida06 - 一个简单的综合案例

看来上一关用了非正规的解法,上一关考研的是方法的调用,那这一关就不贴代码了,和上一贯差不过。发现,登录失败是走到了中间的 else if 逻辑里面,我们需要想办法让逻辑走到最后的 else 里面才行。LoginActivity.a 方法返回了一个字符串,obj2 是第二个输入框的字符串。所以这里是使用了第一个输入框的字符串做了一些变化,然后与第二个输入框的字符串比较。一般情况下,可能会直接写 6 个 hook函数,但是其实可以使用反射加循环来完成。去插件里面加载了一个类,我们需要 hook 这个类的方法。

2023-12-20 11:09:40 427

原创 IDA PRO 0B - 类型修复

结构体修复使用程序中的字符串来恢复字段名使用全局交叉引用来确定字段类型。

2023-12-20 11:06:20 1221

原创 IDA PRO 0A - 交叉引用

本文将讨论IDA中的交叉引用的相关知识。更多c++逆向知识可以看B站的课程《C++ 反汇编基础教程(IDA Pro Visual Studio)》

2023-12-18 12:26:26 1482

原创 Frida05 - 高级API用法

这里我们注册了一个类,com.example.demo2.SimpleBook2,并且实现了一个代理类,将 MainActivity 的字段替换之后,我们就可以让代理类来托管逻辑,做很多操作。项目里面不一定引入了Gson,所以我们需要自己编译一个gons库,放到手机里面,然后使用frida加载一下就可以使用了。有时候,我们想做一个AOPhook的时候,就需要实现一个接口,我们可以使用 registerClass 方法来做到。符合直觉,子类可以转成父类类型,但是调用的方法还是子类的。

2023-12-18 12:23:26 526

原创 IDA PRO 09 - 反汇编基础03

对于包含虚函数的类,你必须将一个虚表指针作为类中的第一个字段。在计算对象的总大小时,也必须考虑到虚表指针。这种情况在使用 new 操作符动态分配对象时最为明显,这时,传递给new 的大小值不仅包括类(以及任何超类)中的所有显式声明的字段占用的空间,而且包括虚表指针所需的任何空间。下面的例子动态创建了 SubClass 的一个对象,它的地址保存在BaseClass 的一个指针中。

2023-12-14 09:34:30 1127

原创 Frida04 - 基本API用法

全部上传到了 github 上:https://github.com/aprz512/Android-Crack。

2023-12-14 09:32:25 421

原创 Frida03 - 一个简单案例

首先,尝试一下 hook com.example.yaphetshan.tencentwelcome.a 类,发现它虽然继承了 net.sqlcipher.database.SQLiteOpenHelper 但是无法 hook 到 getWritableDatabase 方法。回想一下,我们解压出来的目录里面有一个 Encrypt.db,所以很明显,这里是要我们拿到这个加密数据库的密钥。里面有一个 base.apk,这个 apk 很老了,只能运行在低版本下,否则会报 so 链接错误。

2023-12-13 09:34:19 512

原创 IDA PRO 08 - 反汇编基础02

本文主要讨论数组与结构体在汇编中的表现形式。当然如果你对其他的基本单元有兴趣,有一本书一定以可满足你的需要,那就是《逆向工程权威指南》,书分上下两册,里面对各种指令与基本语法的汇编进行了详细的讨论,比如:switch 语句,循环等等。

2023-12-13 09:30:28 1208

原创 Frida02 - 内存漫游,hook使用

objection 还可以安装插件。首先,我们找到想要安装的插件,比如 Wallbreaker:安装成功:使用看文档就好了,简单演示一下:这个作者还有一个脱壳的插件:https://github.com/hluwa/frida-dexdump用法看文档就好了。

2023-12-12 09:57:19 1419

原创 IDA PRO 07 - 反汇编基础01

本文主要讨论一下反汇编里面的函数调用与栈帧。内容将会比较偏理论,但是你看过《CSAPP》的话,也不难理解。有兴趣的可以去B站搜一下该内容,有个up讲的不错,图文并茂,总共百来个小时,花几个月时间看完还是很划得来的。

2023-12-12 09:50:48 974

空空如也

空空如也

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

TA关注的人

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