- 博客(19)
- 资源 (5)
- 收藏
- 关注
原创 Nexus 6 编译并刷机 Android 7.1.1 AOSP以及常用的修改源码快速验证方法
Nexus6编译刷机以及常用的修改源码快速验证方法
2022-11-29 21:57:50 1264
原创 VSCode代码编译启动调试
编译运行fork vscode的源代码,并clone到本地, checkout到master分支执行yarn install安装依赖,具体node环境查看官方文档执行yarn watch编译代码并且执行实时监控修改进行增量编译执行./script/code.sh启动electron程序1. yarn watch分析利用gulp watch监控目录变化,实时编译最新的代码gulp ...
2019-09-09 10:36:59 2464
原创 利用docker搭建基于debian9的路由器分析环境
一、工具链binwalk 用来解压固件包qemu 用来模拟运行mips架构的程序mips linux gcc 用来交叉编译mips架构下的可执行文件retdec 用来反编译mips架构下的可执行文件Docker的安装和debian9镜像的拉取就不介绍的,自行百度二、debian 91.更新源# 备份原始更新源mv /etc/apt/sources.li...
2018-07-31 23:48:25 2283
原创 微信小程序包解析
零、背景由于需要找出一些小程序内部的逻辑,我对小程序的理解是一个类似于react native的东西,用java script写的代码,通过一个解释引擎将其解析成安卓原生的控件,所以核心的逻辑应该是写在某个js文件内,因此就需要想办法拿到小程序的运行包以及得到运行包内的js代码。一、寻找小程序包1.1 初步分析要拿到程序包,最简单的办法就是寄希望于小程序是一个下载在本地的包,这样只需要找到这个包,再
2017-10-25 23:13:47 12810 2
原创 Java的String、StringBuffer、StringBuilder
一、String的解析1.1 问题的引入相信许多人都遇到过这样的一道面试题String s1 = "ab";String s2 = "cd";String s3 = "abcd";String s4 = s1 + s2;String s5 = "ab" + "cd";System.out.println(s4 == s3);System.out.println(s5 == s3);由于==
2017-09-18 16:05:14 868
原创 排序算法(八)-基数排序
1. 原理基数排序不需要直接比较数值的大小和直接在序列中交换数据,这个其他的排序算法有很大的不同,它是根据数字中各位的值,通过对其进行分配收集来实现排序的。基数排序的原理很简单易懂,下面给出一个示例应该就能理解了。 对于[29, 9, 14, 87, 92, 199, 283, 183, 65, 43, 6 ,3]这个序列进行LSD基数排序:计算出这个序列中最大数的位数,可知是283,位数为3
2017-09-17 17:13:30 419
原创 排序算法(七)-堆排序
1. 原理1.1 什么是堆要理解堆排序,首先要先理解什么是堆。堆是一颗顺序存储的完全二叉树,堆又分为最大堆和最小堆。完全二叉树:设二叉树的深度为h,除h层外,其他各层的节点数都达到最大个数,第h层的所有节点都连续集中在最左边。最小堆:每个节点的值都不大于其子节点的值的完全二叉树最小堆:每个节点的值都不小于其子节点的值的完全二叉树根据上面的描述我们可以用一个数学描述来定义最大最小堆:对于数组[
2017-09-17 17:12:58 545
原创 排序算法(六)-归并排序
0.原理归并排序的基本思想是分治法。先将无序序列分为若干个无序子序列,然后对无序子序列进行排序,最后合并有序子序列,得到完全有序的序列。这就是分解,求解,合并的过程。将待排序序列data[0,1,2….n-1]看成是n个长度为一的序列,将相邻序列进行合并,得到n/2个长度为2的有序序列;将相邻序列再次进行合并,得到n/4个长度为4的有序序列重复第一步和第二步,直到得到长度为n的一个有序序列,此
2017-09-17 17:12:34 352
原创 排序算法(五)-快速排序
0. 原理快速排序是一种划分交换排序,采用了分治法。分治法将原问题分解为若干规模更小,但是结构和原问题相似的子问题,递归求解子问题,最后将子问题的解组合在一起则是原问题的解。划分,选择一个基准,以此基准将当前的无序序列划分为左右两个部分,并使得左边子区间内的数字全部小于基准,右边子区间内的数字全部大于基准求解,递归调用对左右子区间在进行分解操作当子区间只有一个数字时,递归结束,此时的序列就是有
2017-09-16 23:49:08 468
原创 排序算法(四)-Shell排序
0. 原理Shell排序是插入排序的变种,因D.L.Shell提出而得名。Shell排序对数据进行分组,然后对每一组数据进行排序,在每一组数据都有序之后再对所有分组利用插入排序进行最后一次排序,这样能减少数据交换次数,加快排序速度。确定分组规则,一般根据排序数组长度每次折半,但是必须要保证最后一次分组的间隔为1分完组后,就是对每一组内部进行排序重复上述过程,直到进行完间隔为1(也就是插入排序)
2017-09-16 21:01:02 465
原创 排序算法(三)-插入排序
0. 原理插入排序和冒泡排序以及选择排序的原理也比较相似,不过和他们元素交换的思想有点不同,就是插入不再是元素之间的交换,而是将排序的过程转换为在有序序列中插入元素的过程。具体的流程如下(方便理解,我们默认将序列从小到大排列):第一个数字看成是一个有序序列取出第二个数字插入到第一个元素中,如果第二个数字大于第一个数字,则数字位置不变,否则则插入到第一个数字前面。重复上述过程,取出第三个数字,根
2017-09-16 21:00:09 288
原创 排序算法(二)-选择排序
0. 原理选择排序和冒泡排序一样是一种简单直观的排序算法,工作原理如下:在未排序序列中找到最大或者最小的数字,放到最前或者最后的位置再从剩余的序列中找到最大或者最小的数字,放到剩余序列的最前或者最后的位置重复操作直到序列有序对[2, 8, 1, 5, 3]这个数组排序,完整流程如下round 1 start2 8 1 5 3 (exchange data: 2 <-> 1) 1 8 2
2017-09-16 20:59:34 337
原创 排序算法(一)-冒泡排序
0. 原理临近的数字两两比较,按照从小到大或者从大到小的顺序进行交换。每一趟会将最大或者最小的数字放到最终结果的位置重复操作直到倒数第二位对[2, 8, 1, 5, 3]这个数组排序,完整流程如下round 1 start2 8 1 5 3 (exchange data: 3 <-> 5) 2 8 1 3 5 2 8 1 3 5 (exchange data: 1 <-> 8)
2017-09-16 00:23:53 324
原创 Android虚拟机多开检测
0. 背景目前市面上越来越多通过虚拟化多开的应用或者开源项目,包括平行空间VirtualApp双开助手DualSpaceGo双开双开精灵其中VirtualApp是一个个人开源的,直接点击可以跳转到GitHub页面。这些虚拟化方案都已经非常成熟并且许多经过了市场的检验。但是很多敏感的应用,比如支付,社交,金融并不想让自己运行在虚拟环境中,因为在虚拟环境中很容易进行伪造设备,进行注入,进行
2017-09-14 23:40:30 7826 6
原创 Android JNI接口混淆方案
一. 背景由于项目有一些比较敏感的判断函数放在了native层,比如是否被改包,是否被Hook,是否被监听,是否有代理,是否运行了一些敏感程序等等,这种接口在编写的时候为了方便一般会写成isModifyPkg,isHook,isListening等等这样的函数,由于是JNI方法,因此也不能混淆,所以很容易被居心不良者直接hook住Java层或者反编译后通过关键字查找到函数调用,从而改变判断逻辑。因此
2017-09-13 18:06:50 1397
原创 Gradle+CMake构建Android Native项目
一. 背景在Android Studio 2.2的时候,已经默认使用CMake的Native编译方案,直接使用Android Studio创建新工程即可。简单的流程可以参考官方CMake+Gradle文档在 Android Studio 2.2 中愉快地使用 C/C++这边文章主要讲解为什么要使用CMake,简要介绍CMake的一些配置,以及CMake和Gradle结合的方式。二. CMake介绍2
2017-09-13 14:30:37 1844
原创 Android ndk之so体积缩减
零.背景SDK对体积比较敏感,而且除了接口代码其他全部用Native实现,armeabi下的so大概有800k,目标是缩减40%左右。因此有了这次对SO体积进行缩减的过程。体积的优化主要有四个层面,分别是代码,编译参数,项目结构和优化工具,下面对这四个方面进行说明。一. 代码层面代码层面无非是替换部分臃肿的第三方库,精简自己的实现代码,尽量减少stl库的使用,甚至纯粹用c实现。 就我的这个项目而言
2017-09-04 14:56:35 10914
原创 关于做Notification的一些经验
需求是这样的:一个显示应用下载器状态的通知栏,能显示下载进度,下载速度,任务数量等等信息。1. 常驻通知栏其实出来这个需求是因为下载器需要一个Service作为承载,特别是当应用切换到后台时,没有一个前台Service在跑的话,很容易被系统回收掉。一开始年少无知,不知道为啥应用宝,豌豆荚等等应用商店的下载都要启动一个常驻的通知栏,后来才发现这样才能将Service保持在前台运行。
2017-08-14 14:41:19 338
原创 Broadcast的Intent中塞入INTENT_NEW_TASK引发的兼容性问题
0. 起源在做通知栏时,因为需要做点击通知栏做一些非启动Activity的操作,因此需要通过如下代码接受点击通知栏事件的广播Intent clickIntent = new ntent(mContext,NotificationClickReceiver.class);PendingIntent contentIntent = PendingIntent.getBroadcast(mContext
2017-08-14 14:37:09 424
快乐的Linux命令行
2017-09-16
Android软件安全与逆向分析_带书签
2017-09-16
Check_VirtualAPK
2017-09-14
JNI_Obscure
2017-09-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人