![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
技术分享
文章平均质量分 54
分享一些常用的技术知识点
Tasfa
www.tasfa.cn
展开
-
Android技术-修改SO导出符号
经常在使用第三方SDK的时候会莫名其妙报错,其中最常见的一种就是SO符号冲突,比如libA.so静态链接了libC.a,而libB.so动态链接了libC.so。这样便会导致符号冲突。又或者在使用不同版本的动态库,也会造成符号冲突。基于以上背景,可能存在一下几种解决方案。符号冲突的so重命名。原创 2023-11-07 17:09:11 · 579 阅读 · 0 评论 -
汇编基础(3) --X86-64
x86_64汇编语言是一种低级程序设计语言,用于控制x86_64架构的处理器执行特定的指令序列。它提供了对底层硬件的直接访问和控制,因此常用于编写性能关键的系统软件、驱动程序和嵌入式设备。对于熟悉高级编程语言(如C或C++)的开发者来说,了解和学习x86_64汇编语言有助于深入了解计算机的工作原理和优化代码的性能。x86_64汇编语言使用助记符(mnemonics)来表示不同的机器指令。这些指令可以操作寄存器(Registers)、内存(Memory)和标志位(Flags)等系统资源。原创 2023-09-25 10:52:12 · 1266 阅读 · 0 评论 -
汇编基础(1)--ARM32
ARM32,也称为ARM Architecture v7,是一种32位的指令集架构(ISA),由ARM公司开发并广泛应用于嵌入式系统和移动设备。ARM32是ARM体系结构中较早的版本,被许多处理器核使用,包括Cortex-A、Cortex-R和Cortex-M系列。ARM32架构的主要特点如下:精简指令集:ARM32使用了精简指令集(RISC),指令长度固定为32位,使得指令执行更加高效。可变长度指令:ARM32指令可以是16位或32位长,因此可以灵活地进行代码密度和性能的权衡。原创 2023-09-20 18:05:26 · 1371 阅读 · 0 评论 -
汇编基础(2) -- ARM64
ARM架构中,ARM64(也称为AArch64)是一种64位处理器架构,它是ARMv8指令集的一部分。与之前的32位ARM架构相比,ARM64提供了更大的寄存器容量、更广阔的地址空间和更高的计算能力。64位版本的指令集和32位版本的指令集有一些区别,这些区别主要涉及到以下几个方面:寄存器:ARM64架构提供了31个通用寄存器,每个寄存器的容量为64位。相比之下,32位ARM架构只有16个通用寄存器,每个寄存器的容量为32位。操作数大小:在ARM64架构中,所有数据都是以64位的形式进行处理。原创 2023-09-20 17:43:49 · 2794 阅读 · 0 评论 -
Webassembly系列--报错整理&经验分享
本文主要是通过之前wasm项目总结一下通用的方案方法。原创 2023-07-10 10:53:54 · 1215 阅读 · 0 评论 -
代码分析技术研究
本文主要记录IDA静态分析与Frida动态分析的一些分析Tips。原创 2022-12-14 17:08:57 · 223 阅读 · 0 评论 -
Flatbuffer技术研究
逆向分析研究过程中,会遇到相关的FlatBuffer知识,主要涉及FlatBuffer安装、源码编译、二进制流逆向解析、正向研发等技术点。运行无报错即为Flatbuffer文件格式。原创 2022-12-13 16:07:30 · 726 阅读 · 0 评论 -
Android系列--刷机
7.1. 如果刷入bootloader出错(FAILED (remote: Command Flash Error))5.1 注意:可以自行解压到其他目录,设置好系统路径(\sdk\platform-tools)下载原生的rom或者其他自定义rom(谨慎,可能存在病毒)3.2 同时按下音量键+ - 和电源键 (不同手机不同)解决: 命令: fastboot set_active b。(pixel2 以上可直接点击Flash进行刷机)连接USB,退出Google账号(如有)进入bootloader。原创 2022-10-21 10:56:30 · 625 阅读 · 0 评论 -
Android技术系列--Python ADB实现
有时候Python大型项目需要使用adb操控Android设备,但是直接使用adb执行命令可能会有各种安全问题,以及需要适配平台的问题。本文通过实现与PC ADB Server进行通信的socket,之后与adb daemon完成ADB通信,无需adb可执行文件。使用Python实现ADB,不执行命令利用Socket和PC端的adb server进行通信,从而控制Android端...原创 2022-06-14 11:12:38 · 1894 阅读 · 0 评论 -
Python系列--二进制文件解析
Python解析二进制流原创 2022-03-24 11:06:20 · 3683 阅读 · 0 评论 -
蓝牙App系列漏洞原理分析与漏洞利用
蓝牙App系列漏洞原理分析与漏洞利用作者: heeeeen本文系转载,目的是学习,如有侵权,请联系删除转载出处:http://www.ms509.com/蓝牙App漏洞系列分析之一CVE-2017-06010x01 概要2017年5月的Android安全公告修复了我们提交的一个蓝牙提权中危漏洞,这个漏洞尽管简单,但比较有意思,能够使本地恶意App绕过用户交互,使用户强制接收外部传入...转载 2018-11-07 11:43:21 · 2819 阅读 · 1 评论 -
安卓WebView漏洞绕过URL检测姿势
Android WebView RCE漏洞原理要造成任意代码执行漏洞,至少具备几个条件开启JavaScript开关 setJavaScriptEnabled(true)调用 addJavascriptInterface()loadUrl数据源头能进行控制其他以下是漏洞代码:public class MainActivity extends AppCompatActivity {...原创 2019-04-23 15:15:39 · 951 阅读 · 0 评论 -
ADB配置提权漏洞(CVE-2017-13212)原理与利用分析
*本文原创作者:Tasfa,本文属FreeBuf原创奖励计划,未经许可禁止转载 原文链接 http://www.freebuf.com/articles/terminal/161843.html 0×01 背景adb由于拥有shell权限,因此仅在授权PC端后才可使用shell权限,而通过该漏洞,可以实现在移动端获取shell权限,以致于可随意删除应用、屏幕截图等等高权限操作。不过移动端恶...转载 2018-03-05 16:38:09 · 2329 阅读 · 0 评论 -
小米浏览器地址栏欺骗漏洞原理与利用分析
0x00 概述漏洞概述:通过构建URL使得用户地址栏显示正常的url地址,而实际访问的却是恶意网站漏洞编号:CVE-2019-10875测试环境: 小米Note 4测试版本: v1.5.3下载地址: apkmirror影响版本: MI Browser (v10.5.6-g) and Mint Browser (v1.5.3)0×01 漏洞原理首先依旧是猜测一下漏洞挖掘的思路,这个实...原创 2019-04-26 10:30:27 · 1247 阅读 · 0 评论 -
Android调用链追踪方法
开启debuggable修改AndroidManifest.xml,添加android:debuggable=“true”修改系统ro.debuggable的属性./mprop ro.debuggable 1(部分手机无效) 下载magisk resetprop ro.debuggable 1stop;start; //一定要通过该方式重启打开monitor/Library/Android/sdk/tools/monitor开启跟踪方法按钮再次点击该按钮即可停止追踪。分析工具原创 2020-05-12 16:23:52 · 1399 阅读 · 0 评论 -
免Root卸载系统预装应用
一条命令免root卸载系统预装应用pm uninstall -k –user 0 packageName详细步骤1、手机打开调试开关连接PC 2、打开cmd或terminal,输入以下命令:adb shellpm list packages | grep 包名关键字pm uninstall -k --user 0 packageName原创 2017-12-02 16:49:29 · 17547 阅读 · 0 评论 -
Apktool 源码分析
一、编译1.源码下载: https://github.com/iBotPeaches/Apktool2.编译可以直接使用Apktool目录下的gradlew.bat命令,这里使用了Android Studio来编译源码,为后续调试做准备。3.导入源码,步骤:File–>open–>源码路径,或者在导航页面直接选择import project4.点击右边的Gradle(注意这里按原创 2016-09-30 13:32:57 · 1536 阅读 · 0 评论 -
调用so中的函数
背景c++层,有时候提供的第三方so接口不满足需求,需要自定义调用so中的函数,大致分为:调用未导出函数调用导出函数基础获取so基地址通过maps文件获取/*** 获取so文件基地址* @param pid:pid module_name:soName* @return 地址* @invoke get_module_base(getpid(),"libtest.so")**/unsigned long get_module_base( pid_t pid, co原创 2020-08-25 15:26:12 · 3064 阅读 · 0 评论 -
double在内存中的解析方式
(double)10.0 堆栈中存在方式:分析:* 栈解析的数据为: 大端* 栈的顺序为: 低地址–>高地址* 解析方式按4个字节反序解析根据以上,则解析数据为: 0000000000002440解析import structimport binasciistruct.unpack("<d",binascii.unhexlify("0000000040240000"))# (1.96921209401577e-310,) 错误❌struct.unpack(">d",原创 2021-05-20 17:13:52 · 195 阅读 · 0 评论 -
Opencv相关
从文件中读取CVMatcontent = open(binMatPath, "rb").read()mat = np.frombuffer(content, dtype=np.uint8).reshape((ROW, -1))点集可视化函数POINT_SIZE = 1POINT_COLOR = (0, 0, 255) #BGRTHICKNESS = 4 # 0、4、8def visPoints(pointsArray,txtPath): global POINT_SIZE,POINT原创 2021-04-19 15:25:22 · 100 阅读 · 0 评论 -
图形渲染框架--OpenGL ES
渲染在OpenGL进行绘制的时候,首先由顶点着色器对传入的顶点数据进行运算。在通过图元装配,将顶点转换为图元。然后进行光栅化,将图元这种矢量图形,转换为栅格化数据。最后,将栅格化数据传入片元着色器中进行运算。片元着色器会对栅格化数据中的每一个像素进行运算,并决定像素的颜色。OpenGL展示到屏幕上的流程整体上,我将7个流程步骤拆解成了3大部分:确定顶点的位置,通过这些顶点绘制出指定的图形为图形上色,可以是纯色、渐变彩色或者是图片纹理缓冲与展示:将上述的图形加载到帧缓冲区(FrameBuffer)原创 2021-02-22 15:31:03 · 255 阅读 · 0 评论 -
JNI创建Bitmap
背景JNI c++层需要从byte[]数组,pixels创建成jbitmap格式Show me the Code方法一: 速度较慢 int _width = image.mWidth; int _height = image.mHeight; unsigned char *bitmap = image.mPixelData; jclass bitmapConfig = env->FindClass("android/graphics/Bitmap$Config原创 2020-09-02 14:10:27 · 1168 阅读 · 0 评论 -
Protobuf技术研究
背景有时候逆向会遇到protobuf相关的东西,这篇文章主要是记录一下分析过程Protobuf基本使用1.定义proto文件//定义版本syntax = "proto2";//java相关定义package netty;option java_package = "com.test";option java_outer_classname = "TestProto";//Protobuf定义message SubscribeReq{ //optional/required/rep原创 2020-08-31 17:48:13 · 346 阅读 · 0 评论 -
SpringBoot基础搭建
APP服务端接口搭建流程总结环境准备MavenTomcatJava8步骤直接使用initializr进行创建新的应用,点击Generate即可生成代码Springboot编程package com.test; import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.s原创 2020-07-03 17:00:44 · 128 阅读 · 0 评论 -
在Android P中默认使用TLS保护用户
在Android P中默认使用TLS保护用户 备注: Android P 即 Android 9.0,文中保持原文翻译Android致力于保证其用户、设备和数据的安全。我们保证数据安全的一种方式是通过保护所有进入或离开使用TLS技术的Android设备数据。正如我们在Android P开发人员预览版中所宣布的那样,我们通过默认阻止Android P应用使用未加密连接通信来进一步提升安...翻译 2018-04-27 15:17:52 · 3867 阅读 · 1 评论 -
免费DNS收集
前言免费DNS搜集,欢迎留言回复补充,可用于PS4、X box、Switch、PC等网络加速。DNSPod Public DNS+119.29.29.29AliDNS 阿里公共 DNS 解析服务首选:223.5.5.5备用:223.6.6.6114 DNS常规公共 DNS (干净无劫持)首选:114.114.114.114 、备选:114.114.115.115拦截钓...原创 2019-11-14 11:10:05 · 1328 阅读 · 0 评论 -
JNI学习笔记
JNI技术JNI方法静态注册JNI方法动态注册获取全局JNIEnv指针主线程调用Java方法子线程调用Java方法获取Java类字段值调用Java类父类的重载方法JNI内存泄漏处理具体代码#include <string>#include <jni.h>#include <android/log.h>#define LOG_TAG...原创 2019-11-08 14:03:07 · 156 阅读 · 0 评论 -
JNI返回自定义结构体数组到Java
网上关于jni返回自定义结构体数组的文章大部分参差不齐,有的这样写有的那样写,多多少少有 bug,然后就自己探索了一下,基本下面这种写法应该算比较标准的,有任何问题可以评论交流下。原创 2017-11-01 20:42:58 · 4759 阅读 · 0 评论 -
Android Assets打开调用过程源码分析
http://www.tasfa.cn/index.php/2017/09/22/android-assets_sourcecode/一、Android读取Assets中图片并显示private Bitmap getImageFromAssetsFile(String fileName){ Bitmap image = null; AssetManager am原创 2017-09-22 16:11:38 · 733 阅读 · 0 评论 -
Android逆向汇总篇
Android逆向学习汇总篇原创 2017-08-09 16:23:23 · 577 阅读 · 0 评论 -
Android Studio jni动态注册步骤
本文主要记录jni动态注册的步骤,这里使用Android studio 的ndk-build,关于使用cmake的,有时间再写1、在src/main/java/下新建一个java类,类似如下:public class testUtils { static { System.loadLibrary("testJNI"); //加载so,在mk文件中指定 } //原创 2017-10-26 15:33:52 · 1959 阅读 · 0 评论 -
AndroidStudio JNI开发:生成可调用jar
我们知道JNI开发无论是静态注册还是动态注册,都会有跟相关包名类名绑定的情况,因此无法在其他项目正确引用,解决此问题一般是采用编写一个对应的接口java类,将so一并打包成jar,即可供开发者正确使用。 本文主要目的: 用于解决生成的.so库中,jni的方法名有包名的限制,导致其他项目工程引用时,包名不一致,出现jni层接口调用无效的问题。1、新建Android Library 在p原创 2017-10-26 17:24:35 · 2478 阅读 · 0 评论 -
Binder Service使用
背景网上大部分的文章都是在讲binder的原理,但都没有详细地解释使用以及跨进程调用的条件以及注意的点,这篇文章主要是关注以上的点。跨进程跨进程需要注意的点:客户端与服务端的aidl文件必须完全一致才行如果不存在android:process属性,只有应用app本身进程存活,才可以进行跨进程调用如果存在android:process属性,无论app本身进程是否存活,只有process...原创 2018-12-21 15:01:12 · 321 阅读 · 0 评论 -
C++中结构体与类的区别(struct与class的区别)
struct与class的区别:默认的继承访问权限(struct默认是public的,class默认是private的)class可用于定义模版参数而struct不用于定义模版参数解释1、继承访问权限不同//结构体Astruct A{ int a; //默认为public}//结构体B 继承Astruct B:A{ int b;}以上,结构体B继承A时,是publ...原创 2019-03-07 14:29:09 · 391 阅读 · 1 评论 -
Intent.parseUri()详解
Intent.parseUri()详解由于经常会有类似下面的控制启动界面代码:this.startActivity(Uri.parse(url));this.startActivity(Intent.parseUri(url));注意两者区别第一种写法只能使用类似 http(s)/file等 协议开头的url,而第二种写法除了以上协议外,还可以启动Activity界面至于如何启动A...原创 2019-04-16 11:26:18 · 7497 阅读 · 0 评论 -
Android Root 方案总结
刷机有风险,如果破坏设备,风险自担!CF-Auto-RootTwrp刷入supersuCF-Auto-Root下载对应设备的CF-Auto-Root版本连接USB进入bootloader模式adb reboot-bootloader运行对应平台的CF-ROOT脚本Twrp刷入supersu下载以下两个文件:SUtwrp将su.zip pus...原创 2019-05-27 18:28:29 · 963 阅读 · 0 评论 -
Android系统架构理解
Android各子系统间通讯Android系统官方架构图原创 2019-10-09 15:18:41 · 243 阅读 · 0 评论 -
JavaScript笔记
1.脚本必须在标签之间,一般放在中2.使用src属性可以插入JS脚本(注意在JS脚本中是不需要有标签的)3.输出:document.write("String可以有html的标签可以有+ 运算符");4.注释:单行注释:// 多行注释:/**/5.变量声明:用var声明变量例子: 字符串: var str="Hello" 数组: var arr=[1,2,原创 2017-06-21 00:07:32 · 223 阅读 · 0 评论