淘最热点
前置知识SHA-1算法SHA1的java实现MessageDigest sha1 = MessageDigest.getInstance("SHA-1");sha1.update("xiaojianbang".getBytes());sha1.digest();
特点摘要长度为160bit
加密后的字节数组可以编码成Hex、Base64
没有任何输入,也能计算hash值
初始化常量0x674523010xEFCDAB890x98BADCFE0X103254760XC3D2E1F0
AES算法根据长度不同,可以分成 AES-128、AES-192、AES-256
AES
密钥长度(比特)
分组长度(比特)
向量长度(比特)
加密轮数
AES-128
128
128
128
10
AES-192
192
128
128
12
AES-256
256
128
128
14
AES的java实现SecretKeySpec key = new SecretKeySpec("1234567890abcdef". ...
初探So
枚举各种枚举导入表通过枚举导入表,可以得到出现在导入表中的函数地址
var imports = Module.enumerateImports("libencryptlib.so");for(var i = 0; i < imports.length; i++){ console.log(JSON.stringify(imports[i]));}
枚举导出表通过枚举导出表,可以得到出现在导出表中的函数地址
var exports = Module.enumerateImports("libencryptlib.so");for(var i = 0; i < exports.length; i++){ console.log(JSON.stringify(exports[i]));}
枚举符号表通过枚举符号表,可以得到出现在符号表中的函数地址
var symbols = Module.enumerateSymbols("libencryptlib.so");fo ...
自定义View1-4Canvas对绘制的辅助
1 范围裁切范围裁切有两个方法: clipRect() 和 clipPath()。裁切方法之后的绘制代码,都会被限制在裁切范围内。
1.1 clipRect()使用很简单,直接应用,记得要加上 Canvas.save() 和 Canvas.restore() 来及时恢复绘制范围。
canvas.save()canvas.clipRect(left, top, right, bottom)canvas.drawBitmap(bitmap, x, y, paint)canvas.restore()
1.2 clipPath()其实和 clipRect() 用法完全一样,只是把参数换成了 Path ,所以能裁切的形状更多一些:
canvas.save();canvas.clipPath(path1);canvas.drawBitmap(bitmap, point1.x, point1.y, paint)canvas.restore()canvas.save()canvas.clipPath(path2)canvas.drawBitmap(bitmap, point2.x, point2.y ...
自定义View 1-3drawText()文字的绘制
1 Canvas 绘制文字的方式Canvas 的文字绘制方法有三个:drawText() drawTextRun() 和 drawTextOnPath()。
1.1 drawText(String text, float x, float y, Paint paint)drawText() 是 Canvas 最基本的绘制文字的方法:给出文字的内容和位置, Canvas 按要求去绘制文字。
val text = "Hello HenCoder"canvas.drawText(text, 200f, 100f, paint)
1.2 drawTextRun()drawTextRun() 是在 API 23 新加入的方法。它和 drawText() 一样都是绘制文字,但加入了两项额外的设置——上下文和文字方向——用于辅助一些文字结构比较特殊的语言的绘制。
额外设置一:上下文。
有些语言的文字,字符的形状会互相之间影响:一个字你单独写是一个样,和别的字放在一起写又是另外一个样。
不过我们就不用管它为什么这么神奇了,也不用替阿拉伯人操心这么复杂的文字他们使用起来会不会很 ...
自定义View2 Paint
自定义View1-2 Paint详解1颜色Canvas绘制的内容,有三层对颜色的处理:
基本颜色:1、Canvas.drawColor/ARGB() –颜色参数 2、Canvas.drawBitmap()–bitmap参数 3、Canvas图形和文字绘制–paint参数。
ColorFilter:Paiint.setColorFilter(CorlorFilter)。
Xfermode:Paint.setXfermode(Xfermode)。
1.1 基本颜色像素的基本颜色,根据绘制内容的不同而有不同的控制方式:
Canvas的颜色填充类方法drawColor/RBG/ARGB() 直接作为参数传入。
drawBitmap()的颜色与bitmap参数的像素颜色相同。
图形和文字(drawCircle()/drawPath()/drawText()…) 在paint参数中设置。
Paint设置颜色的方法有两种:一种是直接用 Paint.setColor/ARGB() 来设置颜色,另一种是使用 shader 来指定着色方 ...
入门ndk
So中常用的Log输出#include<android/log.h>#define TAG "xiaojianbang"#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__);#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, TAG, __VA_ARGS__);#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, TAG, __VA_ARGS__);
NDK多线程JavaVM每个进程中只有一份
JNIEnv每个线程中都有一份
//线程id,其实就是longpthread_t thread;//线程id 线程属性 函数 传递给函数的参数pthread_create(&thread, nullptr, myThread, nullptr);//等待线程执行完毕//默认的线程属性是joinable 随着主线程结束而结束//线程属性是det ...
android逆向基础
cmd常用快捷键新选项卡: ctrl+shift+d/t
划分窗格: alt+shift+d/加号/减号
关闭窗格: ctrl+shift+w
调整窗格: alt+shift+方向键
窗格切换: alt+方向键
Java位运算符右移>>4 -> 0000 01004 >> 1 -> 0000 0010
Hex编码1 byte = 8 bit每个十六进制数对应4个二进制位
数组初始化方法静态初始化元素类型[] 数组名 = new 元素类型[]{元素,元素,、、、}int[] arr = new int[]{1,2,3,4,5}int[] arr = {1,2,3,4,5}相当于int[] arr = new int[5]arr[0] = 1; arr[1] = 2; arr[2] = 3; arr[3] = 4; arr[4] = 5
动态初始化元素类型[] 数组名 = new 元素类型[数组长度]int[] arr = new int[5]
二维数组定义 ...
frida相关API
hook方法的所有重载Java.perform(function(){ function showStacks(){ console.log( Java.use("android.util.Log") .getStackTraceString( Java.use("java.lang.Throwable").$new() ) ); } var utils = Java.use("com.xiaojianbang.hook.Utils"); var overloadsArr = utils.getCalc.overloads; for(var i = 0; i < overloadsArr.length; i++){ overloadsArr[i].implementation = functio ...
自定义View
Canvas.drawXXX() 和 Paint 基础Canvas.drawColor(@ColorInt int color)颜色填充这是最基本的drawXXX()方法:在整个绘制区域涂上指定的颜色。
canvas.drawColor(Color.BLACK) //纯黑canvas.drawColor(Color.parseColor("#88880000")) //半透明红色
类似的方法还有drawRGB(int r, int g, int b) 和 drawARGB(int a, int r, in g, int b),它们和drawColor(color)只是使用方式不同,作用都是一样的。
canvas.drawRGB(100, 200, 100);canvas.drawARGB(100, 100, 200, 100); //第一个参数代表透明度,值越小越透明
drawCircle(float centerX, float centerY, float radius, Paint paint) 画圆前两个参数centerX、centerY是圆心的坐标,第 ...
frida之关键代码快速定位
HashMap的put方法Java.perform(function(){ function showStacks(){ console.log( Java.use("android.util.Log") .getStackTraceString( Java.use("java.util.Throwable").$new() ) ); } var hashMap = Java.use("java.util.HashMap"); hashMap.put.implementation = function(a,b){ if(a.equals("username")){ showStacks() console.log("hashM ...