自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Aun in Scu

嘻嘻

2018-07-07 14:53:07 213

原创 定制ART跟踪JNI函数绑定

JNI函数的绑定:每一个JAVA层函数在native层都对应一个ArtMethod对象,JNI函数在执行前必须完成JNI函数所在类的加载和初始化、以及该JNI函数的ArtMethod对象当中属性和So中具体函数地址的绑定。JNI函数绑定的分类:1、静态:两次绑定,第一次是在类加载的时候,会绑定到Art中的“桥函数”;第二次绑定是在该Jni函数第一次被真正调用时候,由Art完后该JNI函数在So中地址的查询以及绑定。art_jni_dlsym_looup_stub_(汇编实现)->...

2021-03-31 00:32:48 453

原创 ART中的内联函数笔记

inline用来定义一个类的内联函数,用它来替代C中表达式形式的宏定义,而且消除宏定义缺点。可以解决一些频繁调用的函数大量消耗栈空间问题。它是一种实现关键字,就是在函数实现的地方加上inline关键字才有用,在声明的地方加没有用。同时它只是一种建议,编译器可以忽略这个建议。因此Inline不一定就会被编译器内联编译。保证内联函数的定义被编译器看到的话,使用 ALWAYS_INLINE。内联函数在编译器最终生成的代码中是没有定义的,这个函数是不存在的,也就无法实现对内联函数的hook;内联函数没有

2021-03-24 14:20:50 252

原创 ART中的C++对象内存布局

C++11中的类所占内存大小主要是由成员变量(静态成员变量除外)决定的,成员函数(虚函数除外)是不计算在内的。空类的占用存储空间。class NUllclass {};NUllclass nullclass;64和32位下sizeof的返回值都为1。因为C++要求每个实例在内存中都有独一无二的地址。对齐的影响:class Base{ private: int a;//四字节 char p ;//一字节};Base base;sizeof(base);

2021-03-24 00:23:44 283

原创 C++11笔记

C++引用和指针int int_b = 124; int *int_b_ptr = &int_b;int &int_c = int_b;*int_b_ptr=126;cout<<int_b;int_c=128;cout<<int_b;最后分别打印126 128引用和指针在某种程度上没有区别。nullptr目的:解决NULL带来的二义性问题void func(int){count<<"1";}void .

2021-03-13 20:56:30 213

原创 FART与frida结合

1、优点:1、对FART的脱壳能力增强,对主动调用的dex(没有初始函数)进行脱壳function fartwithClassloader() { Java.perform(function () { Java.choose("dalvik.system. ", { onMatch: function (instance) { console.log(instance); try

2021-03-13 01:23:03 1920 1

原创 android源码编译笔记--踩坑

错误:ninja: build stopped: subcommand failed.解决:打开prebuilts/sdk/tools/jack-admin找到JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME"修改为JACK_SERVER_COMMAN...

2021-03-05 11:45:40 11633 3

原创 pwndbg调试笔记

hyperpwn:hyper和pwndbg启动,启动64/32gdbserver: ./gdbserver 0.0.0.0:23946 -attach pid ,pwndbg:target remote 192.168.0.183:23946然后pwndbg设置架构:set arch arm,set arm fallback-mode thumbc(运行到下一个断点) r(继续运行) ctrl+c暂停 info share查看所有加载的sonm -s so_name |grep m...

2021-02-20 13:37:28 1634 2

原创 Android IDA 动态调试so(过掉JNI_Onload调试检测)笔记

链接:https://pan.baidu.com/s/1oOH9RgukXJcXianq8jgYhg提取码:5lzf这个是我调试的样本APK,是阿里逆向前几年的一道题。拿到APK,先用apktool 解包apktool d ali.apk ,解包之后打开文件夹发现存在so文件,于是用JEB或者android killer打开APK先查找入口主类,发现是com.yaoto...

2019-07-30 11:46:28 1863

原创 android 反调试(TracePid 不断轮询检查 JAVA )

在android 中,在调试状态下,linux会向/proc/"进程PID"/status 中写入状态信息。其中TracePid 就是调试该进程的进程的的Pid,所以反调试的方法之一就是通过不断轮询检查TracePid的值,假如为0的话,说明该进程没有被调试,假如不为0的话,就说明当前该进程正在被调试,程序执行exit(0)操作。我直接用一个类来包装我的adb shell:先通过get...

2019-05-28 23:34:01 1271

原创 android adb命令

进入tmp文件夹,查看文件权限查看正在运行进程通过进程pid查看进程状态TracePid =0 表示没有进程在调试该进程

2019-05-28 15:11:49 280

原创 如何将权限777赋予手机文件夹中的某个文件

文件权限:444 r--r--r--600 rw-------644 rw-r--r--666 rw-rw-rw-700 rwx------744 rwxr--r--755 rwxr-xr-x777 rwxrwxrwx从左至右,1-3位数字代表文件所有者的权限,4-6位数字代表同组用户的权限,7-9数字代表其他用户的权限。而具体的权限是由数字来表示的,读取的权限等于4,用r表...

2019-05-25 02:18:48 2372

原创 如何让电脑共存JDK1.7 和JDK1.8

当电脑先装上JDK1.7,再装JDK1.8后。打开CMD输入 java -version,显示的版本是JDK1.8。此时想要将JDK在版本1.8和1.7之间切换的话,需要打开环境变量设置,找到系统环境变量PATH。将第一行删除(JDK1.8安装成功后会在第一行目录下自动放置java.exe,javaw.exe,javaws.exe,而不是在system32文件夹下)然后为JDK1.7...

2019-05-25 00:22:56 1275

原创 406. Queue Reconstruction by Height(根据身高重建队列)中等难度

假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。注意:总人数少于1100人。示例输入:[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]输出:[[5,0], [7,0], [5,2], [6,1], [4,4], [7,...

2018-08-04 16:26:26 587

原创 111. Minimum Depth of Binary Tree 二叉树的最小深度

给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。我的思路就是遍历二叉树。找到叶子节点的深度,然后排序,输出最小值即可/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; ...

2018-07-10 17:34:42 193

原创 572. Subtree of Another Tree(另一个树的子树)

给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。我最开始的思路是中序遍历两个树,依次放入两个个vector res temp 里面,然后看temp 是否在res里面,在的话返回true,不在的话返回false.但是这种思路有种致命的错误:就是第二张图返回的是false;所...

2018-07-09 20:28:01 270

原创 680. 验证回文字符串 Ⅱ

给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。示例 1:输入: "aba"输出: True示例 2:输入: "abca"输出: True解释: 你可以删除c字符。注意:字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。static const auto ____= [](){ios::sync_with_stdio(false); cin....

2018-06-14 17:37:38 554

转载 C++中的STL中map用法详解

Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识...

2018-06-14 13:01:25 192

转载 cin.tie与sync_with_stdio加速输入输出

我是怎么在不知道这一对函数的情况下活到今天的,以前碰到cin TLE的时候总是傻乎乎地改成scanf,甚至还相信过C++在IO方面效率低下的鬼话,殊不知这只是C++为了兼容C而采取的保守措施。tietie是将两个stream绑定的函数,空参数的话返回当前的输出流指针。#include &lt;iostream&gt;#include &lt;fstream&gt; ////////////////...

2018-06-14 12:49:18 281 1

空空如也

空空如也

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

TA关注的人

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