自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 IDA PRO 实践05 - 标志寄存器

处理器执行一个操作数为 2 个寄存器的指令时,无法判别这是有符号还是无符号数的运算。读者会知道是因为可以从后面那个条件跳转指令来判断。所以处理器同时考虑这 2 种情况,并且触发对应的标志。使用 IDA 调试 crackme.exe 程序,运行到程序入口暂停。如果使用 keypatch 修改指令后,发现汇编指令变成 db 形式了,记得先把修改的那段 Undefine,然后再转成 Code。

2024-12-06 10:57:28 697

原创 IDA PRO 实践04 - 调试器

目前已经介绍了IDA加载器的一些内容,后面也还会接着讨论。本章再介绍调试器的一些内容。IDA 支持多个调试器。首先加载初始没有打过补丁的 CRUEHEAD’s crackme 程序,如果现在路径下有已修改程序的数据库或者说 idb 文件,当 IDA 提示时,选择创建新的数据库并覆盖已有数据库(OVERWRITE),开始重新分析。

2024-12-06 10:53:12 1241

原创 IDA PRO 实践03 - 函数栈逆向分析

使用 IDA 打开 HOLA_REVERSER.exe 文件,IDA 会提示我们是否加载符号文件。由于这个程序不是我们写的,所以我们没有符号文件。点击否即可。IDA 7.7 已经很聪明了,打开该文件后,自动定位到了 main 函数。这个程序很简单,我们只需要分析 main 函数即可。

2024-11-06 11:28:25 966

原创 IDA PRO 实践02 - 静态逆向分析入门

一般来说,逆向分析并不是对那些庞大的程序进行完整的逆向,只是分析特定位置的一个或几个函数。首先从静态分析 CRUEHEAD’s CRACKME 这个程序开始。

2024-11-06 11:24:47 905

原创 IDA PRO 实践01 - 指令

​原文:https://ricardonarvaja.info/WEB/IDA DESDE CERO/实验材料:https://github.com/aprz512/reversing-with-ida-pro-from-scratch在这个 IDA 系列教程中,会由浅入深地讲解包括:IDA基本操作、静态及动态逆向分析、脱壳破解、漏洞开发等。以 windows 程序为例(x86汇编)。将会比较少的介绍基础知识,如果遇到不能理解的可看前一个系列与《CSAPP》。

2024-10-30 10:26:36 1352

原创 APUE03 - 系统数据文件与时间

/ 用户名// 密码的占位符(通常是 x,表示在 /etc/shadow 中)// 用户的唯一标识符(User ID)// 用户主组的唯一标识符(Group ID)// 用户的全名或描述信息// 用户的主目录路径// 用户登录后使用的默认 shell。

2024-10-30 10:20:24 863

原创 APUE02 - 文件系统

有个空洞文件的概念,就是我们可以创建一个非常大的文件,但是实际上文件里面没有东西,利用下面这两个函数,就可以在距离文件很远的位置,写一个字符,然后关闭文件,这样就得到一个非常大的,但是实际上只写入了一个字符的文件。用户掩码的作用是用户在创建文件时从文件的默认权限中去除掩码中的权限。原因:创建文件一般是用来读写,所以默认情况下所有用户都具有读写权限,但是没有可执行权限,所以文件创建的默认权限为0666而文件夹的x权限表示的是打开权限,所以这个权限必须要有,所以文件夹的默认权限为0777。

2024-10-29 11:24:33 867

原创 APUE01 - I/O(上)

I/O分为文件I/O与标准I/O。文件I/O也叫系统调用,标准I/O也叫库函数。操作系统负责管理和分配所有的计算机资源。为了更好地服务于应用程序,操作系统提供了一组特殊接口——系统调用。用户程序向操作系统提出请求的接口就是系统调用。所有的操作系统都会提供系统调用接口,只不过不同的操作系统提供的系统调用接口各不相同。库函数可以说是对系统调用的一种封装,因为系统调用是面对的是操作系统,系统包括Linux、Windows等,如果直接系统调用,会影响程序的移植性,所以这里使用了库函数。

2024-10-18 12:10:11 592

原创 脱壳机完成了

脱壳过程中,会在 /sdcard/Android/data/pkgname/ 下生成 dex 等文件,必要时多等一会,待脱壳完毕。没有编译 PixelExperience 镜像,所以自己费心装一下谷歌系软件吧。在 /data/local/tmp/abc 文件里面填入需要脱壳的报名。链接:https://pan.quark.cn/s/9a89355e8e41。有指令抽取的需要手动修复一下,修复参考 fart 即可。​修了一些bug,解决了sdcard权限问题。打开app,等待一分钟后触发脱壳。

2024-10-18 12:04:45 450

原创 加固与脱壳08 - 编译脱壳镜像

编译的是 user 系统,是没有 root 权限的,但是一些银行app还是会检测系统是否为 test-keys,最明显的就是 build number。上一篇已经介绍了,可以去将 fartext 的代码copy过来,修改方法名,以及文件名特征即可。,主要是现在用不到,就不分析效果了。刷机前记得先备份一个原厂镜像,就不给链接了,好像会被封!里面添加上自己加的 Java 代码,否则编译报错。添加脱壳代码后,有个地方需要注意,就是要在。我编译了一个镜像(只适用于Pixel),但是。的选择,可以直接执行。

2024-10-15 13:34:58 244

原创 网络抓包08 - 搜索系统调用

这里只讨论 so 自解密/动态释放的清空,一般这些步骤都是在 init 或者 init_array 阶段进行。所以我们可以等 so 加载完成之后,dump 内存中的数据即可实现 so 脱壳。至于,那些拥有函数粒度的保护,在函数执行前解密,执行后再加密回去的,就不讨论了。关注我的微信公众号:二手的程序员。

2024-10-15 13:33:29 386

原创 网络抓包07 - 自编译openssl

有一些项目会自己编译openssl库,进行魔改等操作。对于这样的项目,之前所讨论的通杀方案, hook SSL_read 与 SSL_write 的方案就可能行不通了,因为这两个符号不一定是导出符号了。

2024-10-14 10:02:29 1047

原创 加固与脱壳07 - 修改源码脱壳

​上文我们讨论了该如何脱壳,现在就开始实现吧。本文不介绍如何编译源码,这块内容之前已经单独发过了,可以使用虚拟机或者 WSL,WSL体验要好些,虚拟机更方便。看开源项目:分析其实现思路,注意,如果需要自己编译源码,直接使用开源项目的代码是很容易被针对的,一定要将方法名等特征给改掉。该项目的整体思路:传递特殊的模拟参数,主动调用类方法将指令解释器模式改为 switch 模式,这个模式源码比较简单。

2024-10-14 09:58:00 1024

原创 加固与脱壳06 - 脱壳分析

Android APP脱壳的本质就是对内存中处于解密状态的dex的dump。首先要区分这里的脱壳和修复的区别。这里的脱壳指的是对加固apk中保护的dex的整体的dump,不管是函数抽取、dex2c还是vmp壳,首要做的就是对整体dex的dump,然后再对脱壳下来的dex进行修复。要达到对apk的脱壳,最为关键的就是准确定位内存中解密后的dex文件的起始地址和大小。

2024-10-14 09:56:14 927

原创 网络抓包06 - Socket抓包

所以,我们可以 hook libc 的 write 与 read 方法,可以得到 SSLSocket 的数据,不过这里的数据是加密了的。之前我们分析了 SSLSocket 的调用堆栈,我们关注的是 SSL_read 与 SSL_write方法。到了 plt 里面,说明调用的是其他 so 中的方法,其实就是 libc.so 中的方法。可以看到,红色圈圈的这条调用链看名字就很可疑,实际上也确实是发送数据的调用链方法。与 sendto 对应的 recvfrom 是一样的分析过程,就不赘述了。

2024-10-09 12:13:29 719

原创 网络抓包05 - r0capture分析

支持两种模式,一种是 verbose,一种是 pcap。如果命令参数有 pcap,就创建 pcap 文件,将hook到的数据储存进去。至于为啥要这样写,找个系统 ssl 库,拖到 ida 里面看一下就知道了。上面分析过,从 py 文件 rpc 过来的方法叫 setssllib,当然这个方法我们也可以手动调用。其中 ssl_session_id 等值的获取API需要阅读系统源码,就不展开了。在 SSL_read 函数返回之前,将数据发送到 py 脚本。可以先看看这个项目,比较纯粹,就一个python文件。

2024-10-09 12:10:34 533

原创 加固与脱壳05 - 壳类型识别

​以前一些老旧的技术就不介绍了,比如,动态加载、内存不落地加载的方式。

2024-10-09 12:07:32 999

原创 加固与脱壳04 - 一些简单的脱壳方法

这里只讨论一些简单壳的脱壳方法及其原因。适用于不需要研究那些被强保护起来的代码,只是想单纯的看看某个地方的业务逻辑。原理:对于完整的 dex,采用暴力搜索 dex035(DEX有多个版本,可以自行匹配)即可找到。而对于抹头的 dex,通过匹配一些特征来找到。该工具使用起来极其简单就不演示了。

2024-10-09 12:02:46 975

原创 加固与脱壳03 - 加固技术讨论

在 02 中,贴了一张图,里面涵盖了加固的绝大部分知识。现在我们稍微展开说一下其中几个,也是后续会深入学习的,其中一些还需要单独成系列才行。

2024-09-29 11:38:29 615

原创 网络抓包04 - SSLSocket

以 Android10 - OkHttp 的实现为例。因为 OkHttp 的实现与Android的版本有关。在Android 10 及以上,SSLSocket 的实现类是,这个打个断点就能看出来。

2024-09-29 11:33:02 677

原创 网络抓包03 - 实践篇

弄完之后,再去做请求,一般情况下会ok,如果还不行,就需要祭出 ssl pin 等hook代码了,objection 也可以一键处理,就不展开了。可以看到,它确实是一个 PKCS12 格式的文件,我们可以直接将它导入到charles里面去,为了简单,域名我选择了全匹配。VPN抓包也是失败的,祭出 ssl pin 等 hook 的代码之后,发现还是走不通。这就让人比较头大了。可以确定的是,网络请求肯定是触发了的,那么我们hook一下最底层的代码,看看调用堆栈。对于VPN抓包失败的,先上一套降龙十八掌。

2024-09-29 11:29:45 584

原创 加固与脱壳02 - 应用安全介绍

Android应用的安全是分为很多个方面的,并不是说开发了一个APP后,找安全厂商加个壳就完事了。加壳能当作一道防护墙,但是App不能只有这一道墙。当然,我们后续学习的也只有加固这一个技术,但是全面了解一下应用安全有哪些方面也是很重要的。这些东西就不一一介绍了。

2024-09-23 13:39:41 185

原创 加固与脱壳01 - 环境搭建

Python,强烈建议安装 pyenv,随意切换 python 版本,有时候新版 frida 不稳定的时候,就可以一键切版本。在IDA调试的时候,需要连接其他的设备,比如 Windows 或者 Android 设备,需要先能够 ping 通才行。建议新建一个目录,将这个目录添加到 PATH,专门存放脚本,比如 adb xxx 命令,下载命令等。类Ubuntu系统,官方提供了 vmware 版本,直接下载就可以使用。自行下载吧,有google drive 连接,上传了阿里云盘后无法分享。

2024-09-23 13:36:30 1069

原创 网络抓包02 - Android抓包攻与防

然后在手机端安装 vpn 应用,例如,v2rayNG,因为我们的思路是让手机的流量都走 vpn,然后 vpn 连接 charles,这样,charles 也能拦截所有的请求。因为是直连,不走代理,所以charles等工具就抓不到包了,这样一定程度上保证了数据的安全,这种方式只是通过代理抓不到包,但是无法防住使用 VPN 导流进行的抓包。使用VPN抓包的原理是,先将手机请求导到VPN,再对VPN的网络进行Charles的代理,绕过了对App的代理。这个可以理解为内置证书方案的谷歌官方版,道理是一样的。

2024-09-23 13:33:47 985

原创 网络抓包01 - 环境搭建/抓包原理

我们安装 charles 证书的时候,只能安装在用户域,所以使用 charles 代理的时候依然无法通过证书校验,导致抓不到包。的原因就是要我们信任这个证书,这样我们使用访问 charles 代理服务器的时候,就能通过这个根证书校验它下发的公钥证书。这保证了只有浏览器和服务器可以理解他们之间传递的信息。这里就涉及到一个信任链的问题,证书上是有数字签名的,这个签名使用的第三方机构的私钥加密生成的。那么,我们如果有了第三方机构的公钥,就可以校验这个证书是不是对的,证书里面有很多信息,也可以用来校验域名之类的。

2024-09-23 13:26:43 1023

原创 Frida0D - hook JNIEnv 相关函数

想到 frida 可以注入 so,所以也可以考虑编译一个打印堆栈的 so,然后调用方法。上面,我们采用的是查询符号的地址,然后hook的方式。对这个函数的 hook,前一篇文章已经贴了一段代码了,这里简单分析一下就ok。JNIEnv 是一个结构体,整个结构体看成一个表,第 215 项对应的就是。,但是这里使用 frida 提供的不需要担心这个问题,有点神奇。namespace 是对的上的,说明是我们需要hook的符号。因为,JNIEnv 结构是不会变化的,所以这个相当实用。同样的,在处理参数的时候,

2024-09-11 15:03:17 536

原创 常见加解密算法09 - HASH 算法

各位读者你们好啊,今天讨论一下 HASH 算法,也是这个系列的完结篇!!!Hash算法,又称散列算法,是一种从任意长度的数据字符串中创建小的、固定长度的值的函数,该值通常被视为数据的“指纹”。不同的数据往往会通过散列算法产生不同的结果,若两个不同的数据通过同一散列函数产生了相同的结果(即散列冲突),这种情况是非常罕见的。:相同的输入始终会产生相同的输出。:计算任何给定数据的哈希值是快速的。:理想中,从散列值中重建原始输入应该是不可行的,即散列函数是单向的。:两个不同输入很难产生相同的输出值。

2024-09-11 14:59:45 1130

原创 Frida0C - Module相关API

亲爱的读者你们好啊,今天主要分享一下 frida 相关的学习文档,见文章最后一节。

2024-09-11 14:57:54 408

原创 Frida0B - native hook

各位读者你们好啊,今天一起讨论下hook so 中的函数的相关 api。

2024-09-06 11:41:48 980

原创 Frida0A - 拦截okhttp

Okhttp 是一个网络框架,现在的Android应用基本都使用的是这个开源库了。想要拦截 OkHttp,首先就要熟悉它的API和原理。这里就不展开了,可以查找一些文章或者自己看源码。OkHttp的工作模式有点像 OSI 模型,它里面的拦截器就相当于一个层次。每个拦截器都负责两部分的工作:将请求进行封装,y = f(x)将返回结果解封装,y’ = f’(x)为了调试方便,OkHttp 里面还自带了一个日志拦截器:有了这个拦截器,就可以打印所有请求的请求体与响应体。

2024-09-06 11:37:52 986

原创 Fr09 - 调用Java方法ida

var bclazz = Java.use('这里写类名');字段也是一样。最后,需要熟悉 Android 的 API。二手的程序员欢迎关注二手的程序员,这里主要分享逆向相关的知识。专注于完整系列,让知识不再碎片化。不定时更新,也欢迎关注我的博客:lyldalek.top公众号。

2024-09-04 11:03:54 803

原创 Frida08-Javascript-中文文档

欢迎关注二手的程序员,这里主要分享逆向相关的知识。专注于完整系列,让知识不再碎片化。不定时更新,也欢迎关注我的博客:lyldalek.top。接下来的一个系列,会深入 frida,但是可能 api 还没有特别熟,所以就准备先过一下 api,顺便做个翻译文档,慢慢更新。文档链接,我开了评论与编辑权限,有兴趣的可以修改。​ 各位读者你们好啊,今天水一篇!翻译是使用的 GPT-4。

2024-09-04 10:59:39 273

原创 常见加解密算法08 - RSA算法

各位 Full of benevolence and righteousness and Talent towering like eight bushels 的读者们好啊,今天讨论一下RSA算法的工作流程。RSA 算法是一种非对称加密算法,它是一种基础数学理论而不是对称密码中的混淆与扩散。它得名于发明者Ron Rivest、Adi Shamir和Leonard Adleman的首字母。这种算法能够确保数据传输的安全,广泛用于互联网安全和电子商务领域。

2024-09-04 10:54:23 912

原创 常见加解密算法07 - 分组密码实战

各位as handsome as Pan An, national beauty and heavenly fragrance的读者们好啊,今天我们来实战一下AES算法的逆向。样本已上传到 https://github.com/aprz512/Android-CrackJava层的比较简单就略过了,直接看C层的。

2024-09-04 10:51:04 440

原创 常见加解密算法06 - 分组密码的填充与工作模式

各位英姿焕发,风华正茂的读者们你们好啊,今天我们讨论一下分组密码的填充与工作模式。分组密码中,需要将明文按指定大小进行分组,由于明文并非指定大小的整数倍,因此在明文的最后一个分组需要将其填充至加密算法所要求的分组大小后进行加密。在解密时,按照同样的填充模式将填充的数据去除。加密时填充,解密时删除,这就需要定一个规则,这个规则就是填充模式。不填充,在此填充下原始数据必须是分组大小的整数倍,非整数倍时无法使用该模式,会报错。填充至符合块大小的整数倍,填充值为填充数量数,需要填充7个字节,就全部填07。原始:填充

2024-09-04 10:49:18 1363

原创 ARM64汇编0C - inlinehook

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

2024-06-20 12:14:02 980

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

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

2024-06-20 12:10:14 701

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

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

2024-06-20 12:07:05 539

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

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

2024-06-03 10:25:44 1082

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

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

2024-06-03 10:22:53 991

空空如也

空空如也

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

TA关注的人

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