自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 资源 (2)
  • 收藏
  • 关注

原创 Lsposed Java HOOK原理及检测

从当前指令 + 0xC处,取地址保存到 X0,根据前面的分析,这是HOOk方法的 ArtMethod结构体指针,接着取出 ArtMethod + 0x20处的值,这个值正是HOOk方法的ArtMethod对应的 entrypoint。这个函数先使用 BuildDex 接口动态生成HOOK类和方法,然后创建ClassLoader加载这个DEX,详情可以分析 BuildDex 内部,会创建 LSPHooker_ 类名和hook的方法名。上述根据不同平台生成了不同的跳板指令。

2024-09-22 12:27:46 766

原创 允许特权APP写data_system目录

修改后发现priv_app仍然被selinux限制。

2024-09-17 00:02:57 232

原创 Android DPC模式多开 APP

4、修改 UserManagerService canAddMoreProfilesToUser getMaxUsersOfTypePerParent。修改 markUserProvisioningStateInitiallyDone。3、修改 mUserManager.getMaxSupportedUsers。1、修改创建多个profile时超出限制。7、 删除不需要的APP。

2024-09-17 00:01:51 1085

原创 Android源码集成 Google Play

将app 和 product 文件夹下的所有apk文件拷贝到 /gms/app目录下,将 priv-app文件夹下的apk拷贝到 /gms/priv-app目录下,在 gms目录下 新建 Android.bp文件,配置预装的app。将 etc lib64 和 framework 拷贝到源码 /gms/copyToSystem 目录下,并在 /build/target/product/base_product.mk 中添加如下拷贝命令。

2024-09-16 23:55:03 615

原创 Android 源码集成可卸载 APP

在 /build/target/product/base_product.mk中添加如下命令, 会将 /apps/apps目录下的所有文件拷贝到 /system/usr/app ,将 shell脚本拷贝到 /system/bin目录。2、系统APP放在 /system/app目录。系统编译后,打包前, /data分区不起作用,因此系统打包前,可以先将APP全部拷贝到 /system分区的 /system/usr/app目录下。1、拷贝APP暂存到 /system/usr/app 目录。

2024-09-16 23:52:39 989

原创 ADB ROOT开启流程

ADBRootService类位于 frameworks/base/core/java/android/adb/ADBRootService.java。当 service.adb.root 属性为 1 且 ro.debuggable = 1 时,会继续保持root权限运行。adb_root服务的入口函数位于 system/core/adb/root/main.cpp。执行 adb root命令时, 调用 restart_root_service。上述字段通过 getString 获取。

2024-09-16 23:47:15 968

原创 USB开启ADB设置流程

那么 sys.usb.state 属性的值是在哪设置的呢?setting应用中有监听adb状态广播:packages/apps/Settings/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java。UsbDeviceManager类路径位于 frameworks/base/services/usb/java/com/android/server/usb/UsbDeviceManager.java。

2024-09-16 23:41:33 1911

原创 编译 Android 11源码

ture 改为 WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY?1)WITH_DEXPREOPT := ture 改为 WITH_DEXPREOPT := false。2、build/make/core目录下dex_preopt_config.mk文件。2、用生成的framework.jar替换系统的framework.jar。3、重启zygote。

2024-09-16 23:27:44 785

原创 LLVM IR指令VM混淆分析

看注解,这个虚拟指令 vstore 的逻辑是从当前栈顶取两个元素,这两个元素都是指向虚拟内存的地址,实际上是虚拟内存的下标,第一个元素指向虚拟内存中的一个 int32值,第二个元素指向虚拟内存中的一个 int32*地址值,然后把第一个元素取出的 int32值,保存到第二个元素取出的int32*地址处,然后把栈顶下标移动2 个。来模拟全部 IR指令的过程。看注解,vadd指令有一个操作数,操作逻辑是将前两个 vpush指令压入栈中的地址,取出来并从虚拟内存中取出值,相加后保存在指令操作数指向的地址中。

2024-09-06 23:31:11 727

原创 数盟IOS端可信ID

基本结论: 所谓的可信设备ID,并不是还原原生的IDFA,同样只是上报一些数据,后台归因然后返回后台保存的IDFA.后台归因时,不是简单的根据某个ID一样判断出是一个设备。也就是说对于越狱设备,直接读取到的就是与APP无关的全局设备ID,当系统不存在这些文件以及设备未越狱时,由SDK生成并保存,未越狱设备测试发现每次清空数据后启动did值改变。2、SDK内部的did出现碰撞等。2、改变包名,不是同一个开发者,IDFA1此时为空,simulateIDFA相同,其余ID不同,但是返回了不同的qid和cdd。

2024-08-30 11:35:58 1552

原创 数美Android SDK

文件路径、stat文件节点信息,__system_property_get系统属性、硬件信息、路由和网络信息等。stat lstat __system_property_get open 等。

2024-08-29 16:35:20 1654

原创 图灵盾IOS SDK

var/mobile/Containers/Data/Application/47E75209-64AF-4F43-AE14-204D57BDF53C/Documents(APP文档目录)Stat信息中的时间信息只有越狱状态下才能获取,即越狱设备可以根据stat时间信息计算设备ID。/usr/lib/CepheiUI.framework/CepheiUI(非法模块)3、同一个设备 HOOK stat函数,篡改函数的返回值,设备ID不同。1、同一个设备清空keychain和app缓存前后,设备ID相同。

2024-08-29 16:31:28 1224

原创 客户端安全全景图

简单描述了下,等有时间了再把每个点的原理和细节详细整理。这里不包括 PC客户端。

2024-08-29 16:01:11 169

原创 unidbg直接调用tiktok so生成签名

Tiktok版本: 33.2.5 (24年1月25日) 通过对Tiktok抓包发现TikTok的所有http请求的头部增加了参数签名(x-argus、x-goron、x-khronos、x-ladon):直接将apk文件用jadx工具反编译,搜索关键字x-argus等,未搜索到任何关键字:使用frida hook java层 Header对象的构造方法,发现有监控到https请求头设置,但是始终没有发现签名字段接着尝试hook interceptor拦截器,打印出请求头部,结果输出的请求头部中还

2024-08-29 15:42:37 1912 11

原创 LuaJit分析(十一)去除string.dump函数

因此即使我们的指令顺序被打乱,通过loadfile系统调用,再通过string.dump调用,可以得到字节码文件,再通过与标准的luajit生成的字节码文件比对,即可找出差异所在。Lua脚本中的string.dump函数用于生成字节码文件,根据对 luajit -b命令的分析可以得出,最终dump出字节码文件都是使用的string.dump函数。同时lj_libdef.h和lj_ffdef.h这两个文件都是自动生成的,在msvcbuild.bat中,使用如下命令生成。

2024-08-29 12:03:10 584

原创 LuaJit分析(十)luajit自定义修改

通过分析luajit字节码文件格式可知,luajit文件由文件头和原型数组组成,而原型又包括原型头和原型体,文件头中包含了字节码文件的一些关键信息,目前的反编译工具根据标准的luajit2.0文件格式解析文件,如果对字节码文件的信息自定义,将直接导致反编译过程中出现异常。字节码指令中,第一个字节存放的是opcode,实质是该字节码的opcode在BCOp中的下标,因此修改上述BCDEF宏定义的顺序后,对应字节码opcode的顺序也跟着改变,即生成的字节码文件与标准的字节码文件中指令的opcode会改变。

2024-08-29 11:51:02 877

原创 LuaJit分析(八)LuaJit预编译库函数加载过程

可以看到,该函数通过调用lj_bcread_proto读取luajit字节码的原型数据,接着使用原型创建一个新函数,然后保存该函数变量。

2024-08-29 11:38:58 476

原创 LuaJit分析(九)LuaJit中的JIT原理分析

Luajit存在97个字节码指令,例如 FORL指令对应一个数字类型的for循环语句,同时还有IFORL指令(强制解释模式执行)和JFORL指令(Jit模式执行),同时解释器实现了对各个字节码指令的翻译,这里以X86的翻译器为例。它将当前指令的地址右移一位,并与HOTCOUNT_PCMASK与操作,得到一个索引(哈希运算),根据这个索引在数值中找到计数值,减去HOTCOUNT_LOOP,当这个计数值小于0时,跳转到vm_hotloop继续执行。多种情况都会出现结束记录的情况,如遇到了已经编译的指令。

2024-08-29 11:35:30 1465

原创 LuaJit分析(五)LuaJit filename分析

参数argx包含了执行的lua脚本文件名,luaL_loadfile加载了一个lua脚本,通过之前的分析可知,luaL_loadfile会加载一个字节码文件或者转换一个源码文件,最终都会得到转换好的原型结构。在还原指针和参数栈后,ins_call开始执行解释器的call指令。

2024-08-29 11:15:33 556

原创 LuaJit分析(七)LuaJit -b 命令分析

由之前对luajit -b 命令的分析可知,readfile函数最终返回原型数据,如果是字节码文件,返回读取后的原型数据,否则进行源码分析再返回原型数据。luajit -b生成字节码,实际上是调用 bcsave.lua脚本中的bcsave函数,该函数通过readfile函数(最终调用loadfile库函数)来完成lua脚本和字节码统一返回原型数据,并通过string.dump库函数生成完整的字节码文件。从这里就可以明显的看出,它通过分别生成头部、原型等数据来完成字节码的生成。

2024-08-29 11:12:59 606

原创 LuaJit分析(六)luajit -bl 命令分析

接着调用bc.lua中的bcdump函数,递归解析各个原型,通过bcline函数,解析各个指令,bcline函数中用到了vmdef.lua中定义的opcode和各个库函数的符号名,这些符号名由buildvm.c在编译过程中自动生成。从备注可以看出就是输出字节码指令,这是一个递归函数,先根据传入的第一个参数,使用funcinfo函数获取函数信息,funcinfo是一个库函数,位于jit.util. funcinfo,如果它有孩子,则递归调用全部为原型类型的孩子。

2024-08-29 11:09:52 1126

原创 LuaJit分析(三)luajit字节码文件格式

Luajit字节码文件格式的完整信息如上图所示,包括文件头Header和原型Proto,一个原型可以对应lua源码中的一个函数或源文件。原型的字节码指令,每条指令占四个字节,默认对齐时,第一个字节为opcode,占用三个字节,始终是0x1B4C4A,表示这是一个luajit文件。STRIP表示是否去除调试信息,0表示没去除,包含调试信息。uleb128类型,表示整个原型占用字节大小,为0标志结束。upvalue,uint16,个数为原型头中指定的个数。BE表示是否大端对齐,默认0表示小端对齐。

2024-08-29 10:59:58 1379

原创 LuaJit分析(四)luajit 64位与32位字节码区别

luajit 64位和32位字节码不一样,体现:1、文件头部的flags表示,64位中有标记 fr2 = 12、原型头中的栈帧大小,当原型中有call指令并有参数时,frame大小会比32位的加13、参数压入的位置,当存在call指令并且有KSTR等指令压入参数时,压入的位置会加14、原因是CALL调用时需要保存返回地址,在32位中,地址占4字节,直接覆盖了栈中压入的函数字段类型的类型部分(4字节),而64位中地址占8字节,因此将栈的大小增加了1,并移动所有参数。

2024-08-29 10:55:03 1392

原创 LuaJit分析(二)luajit反编译工具

总的来说,luajit-decomp比较稳定,但是反编译出来的代码可读性差,之所以稳定,是因为它先使用 luajit -bl 命令将字节码转换成汇编代码,再通过线性扫描汇编代码,转换成lua脚本代码。Ljd是使用Python写的反编译工具,定义了luajit2.0完整的指令信息,并实现了所有的luajit字节码解析函数,解析出来的lua脚本可读性高。

2024-08-29 10:38:14 906

原创 LuaJit分析(一)LuaJit交叉编译

使用ndk版本 r16bNDKP指定了ndk编译器的前缀NDKARCH指定了编译成armv7平台NDK_SYSROOT_BUILD指定了头文件目录NDK_SYSROOT_LINK=$NDK/platforms/android-$NDKABI/arch-arm指定了链接时的库文件目录1、Windows下编译:启动cygwin64,切换到luajit目录,sh运行脚本(需要安装make)2、Linux下编译:sh运行脚本,注意ndk路径。

2024-08-29 10:29:21 932

原创 C++虚函数对象内存模型分析

编写测试代码如下,定义一个基类Base,并第一个虚函数 func。定义一个子类Derived,继承基类Base,并覆盖虚函数 funcmain函数中创建临时对象 Derived, 并使用基类指针指向Derived对象,通过指针调用虚函数 func。首先进入分析main函数代码:上述是main函数的汇编指令,由于是局部申明对象,申明后的对象在栈中保存,保存地址是将该地址通过rdi寄存器传参,然后调用Derived的构造函数。

2024-08-28 20:07:24 1182

原创 IOS CydiaSubstrate inline hook分析

测试代码中 my_fopen直接调用了原始的fopen,此时调用的原始fopen和系统的原始fopen起始地址肯定不一样,因为前四条指令已经被patch,要成功调用,一定得执行原始的前四条指令。从汇编代码中可以看到, blr x8调用了原始的fopen函数,x0和x1保存了fopen需要的两个参数。可以看到,该地址即为自定义的my_fopen函数的起始地址。该地址即为系统原始的fopen地址开始处的第五条指令,到此即可以正常完成原始fopen函数的调用。

2024-02-18 16:40:06 602 1

原创 160个破解练习之CrackMe 008

这个软件超简单,那我就简单的写一下过程:直接OD载入,运行界面如下:随便输入一个字符串提示如下:那么我们直接在OD里面智能搜索字符串,定位到这个提示框调用的函数处;00401CD0 > \55 push ebp00401CD1 . 8BEC mov ebp,esp00401CD3 . 83EC 0C

2017-12-07 11:37:41 465

原创 KMP算法笔记

KMP算法是一种快速的字符串匹配算法,我们先从暴力字符串匹配算法讲起看怎么对其优化得到KMP算法。1、暴力字符串匹配        有如下两个字符串:A:“abcabbcabc”和B:“adfabcabccabcadbcabca”,我们要在B中找到A的匹配位置,暴力匹配的做法就是:把A的第一个元素与B的第一个元素对齐并开始往后遍历比较,遍历的过程中只要有一个字符不匹配,则将

2017-12-07 10:34:50 250

原创 160个破解练习之CrackMe 007

第七个软件与第六个类似,同一个作者,软件界面如下:        软件有两个文本框,三个按钮,点击说明按钮时,和上一个软件的提示类似,也是要求隐藏下面的按钮,使下面的Logo显示完全才算破解。这个软件也是使用Delphi写的,那么我们直接使用Delphi专用的逆向软件分析下事件:         通过分析发现,程序隐藏了一个按钮,

2017-12-06 21:28:52 626

原创 160个破解练习之CrackMe 006

直接进入正题,有了前面几个分析Delphi程序的基础,再分析这个程序就不会没有头绪了,首先打开程序界面如下:程序比较简单,两个输入框,三个按钮,其中一个按钮禁用,其中一个按钮有提示如下信息:      这个1.0版本的软件的目的是使 “ ok ” 和 ” Cancella “ 这两个按钮不可见,以便可以看到Ringzer0的 logo,所以你必须填入正确的代

2017-11-14 15:56:27 1813 1

原创 160个破解练习之CrackMe 005 CKme002

注:分析的过程借鉴了吾爱论坛的一篇文章  文章地址: https://www.52pojie.cn/thread-366291-1-1.html首先打开软件,界面如下:输入用户名点击注册按钮没有任何反应,因为有了第四题的经验,直接用Dark打开软件分析事件函数:        可以看到,这个软件注册的函数有:窗口创建完毕、按钮鼠标按下、面

2017-11-13 18:40:27 1895

原创 160个破解练习之CrackMe 004 CKme

程序的界面如下:        比较郁闷的是,不管我怎么点击它,就是没有任何反应,也就是说在注册码输入错误的情况下是没有任何反应的。通过查壳发现是Delphi程序,没有壳,由于对Delphi不了解,先打开OD搜索关键字,看有没有突破       通过智能搜索,得到了一个“注册成功”字符串,定位到此处:00458031 |. 81BE 0C030000>cmp dwo

2017-11-02 14:13:39 1263 1

原创 剑指offer算法题之替换空格

题目描述:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。       题目分析:看到这个题目第一个想到的就是从头开始遍历,遇到空格就用“%20”替换“ ”,但是发现“%20”占用3个字节的空间,而“ ”只占用一个字节的空间,因此不能够直接替换,那么在遇到一个空格的时候,我们将后面的所有字

2017-10-26 09:10:54 187

原创 剑指offer算法题之二维数组查找(一步一步优化)

题目描述    在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。    题目分析:题目表述的二维数组中,每一行是递增,每一列也是递增,首先我们想到的就是暴力搜索,即从二维数组的[0][0]元素开始一直往后遍历,直到发现有一个数与给定的数相等时,就可以结束遍历,返回真

2017-10-25 17:27:39 495

原创 160个破解练习之CrackMe 003 Afkayas.2

这次要破解的是160个破解练习里的第三个软件,与第二个软件是同一个作者,界面类似,如下:需要输入用户名和对应的序列号完成注册,当直接点击0K时,出现如下错误提示界面,接着程序自动退出:        由于对VB语言不太了解,直接查询错误字符串并没有搜到,后来知道这是VB调用函数时输入的参数类型不匹配。当我们的密码输入一段数字时,出现如下提示:       那

2017-10-24 19:42:13 1596

原创 一步一步教你在空闲空间中插入程序

在空闲空间中插入程序        目标:将一个程序的代码段、数据段、导入表、重定位表等信息插入到另一个程序中,保证先运行插入的程序,再正常运行插入前的程序。        两个程序都是使用汇编语言编写编译,程序体积较小,但程序较大时的原理与插入步骤一样。实验中涉及的两个软件如下:插入程序打开时,先弹出一个对话框,再打开网址“http://www.baidu.com”,

2017-10-23 20:01:21 635 1

原创 C语言枚举进程,实现一个简单的内存补丁

直接进入正题,本文使用c语言对一款小软件实现内存补丁,今天下午才自学过,便想在博客中记录下来,分析过程仅供初学者学习,大神可以绕过。 大概思路为: 1、枚举进程获得系统进程列表                        2、遍历进程列表,根据进程名得到进程的PID                                        3、根据PID获取进程句柄

2017-10-17 20:03:20 1068

原创 160个破解练习之CrackMe 002 Afkayas.1

经过了第一个列子的学习,开始对逆向分析有了一个基本的认识,第二个列子相比第一个列子来说,更加的简单,分析过程如下:首先用DIE插壳,程序是用VB语言写的,没有壳:然后打开程序,发现只是一个“用户名/序列号”形式的验证,任意输入一组用户名密码,弹出如下信息:因此用OD加载程序,用智能搜索字符串,搜索 “ You Get ”,转到如下地址处:004025BD .

2017-10-16 11:11:40 540

原创 160个破解练习之CrackMe 001 Acid burn

这款软件的破解相对比较简单,但内容比较齐全,首先打开软件,发现有一个弹窗如下:这个弹窗可以使用爆破。进入后,软件的主界面如下:需要破解的地方有两个,一个是用户名/密码,一个是单独的序列号。我们首先破解序列号,首先用OD加载软件,F9运行软件,打开序列号的窗口如下:点击后发现弹出了一个弹窗,我们用OD进行智能搜索字符串Try,进到这里:

2017-10-13 09:56:15 726

cheat engine

寻找游戏代码工具 最新汉化版 .................................

2012-10-04

进制转换器

进制转换器,将十六进制数据转换成十进制

2012-09-22

空空如也

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

TA关注的人

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