随笔分类 - android逆向
摘要:https://www.cnblogs.com/revercc/p/16299712.html 在linker初始化的时候,linker_main函数在加载了ELF文件依赖的所有so库后,会先调用call_pre_init_constructors()和call_constructors()函数对s
阅读全文
摘要:被动调用 以自实现的抽取壳为例,对Test01.proc1函数进行抽空,但这次不同的是此Test01类在apk加载的过程中并不会被加载。通过之前被动调用的方式dump dex发现此函数还是被抽空的状态。 总结:单单通过在LoadMethod调用后进行dump dex是一种被动调用的脱壳手段。因为AP
阅读全文
摘要:AndroidKiller查看此apk发现入口Activity找不到,说明此apk被加壳了。 接着查看apk反编译后的代码,发现使用的XX的乐固。 首先尝试在DEX文件加载过程中进行hook,例如hook DexFileLoader::OpenCommon。然后dump下来的dex进行分析发现所有的
阅读全文
摘要:一代壳主要是使用dex整体加密技术,无论是使用DexClassLoader从文件中动态加载dex还是使用InMemoryDexClassloader从内存中加载dex文件,dex文件在被加载后在内存中一定是一个解密后完整的dex文件。脱壳的方法就是找到这个dex文件并dump下来,大多数一代壳为了防
阅读全文
摘要:ActivityThread在handlebindapplication中执行完Application的初始化之后会继续进入到消息循环中接收AMS(activity manager service)启动activity的消息。AMS首先会发送启动入口Activity的消息,然后ActivityThr
阅读全文
摘要:# 一代壳dex整体加固 第一代壳主要是对dex/apk文件整体加密,然后自定义类加载器动态加载dex/apk文件并执行。在动态加载dex/apk文件的时候有落地加载和不落地加载,落地加载就是通过DexClassLoader从磁盘加载dex/apk文件,不落地加载就是通过InMemoryDexCla
阅读全文
摘要:Dex文件加载过程 PathClassLoader 和 DexClassLoader都可以加载dex文件,其对应的基类都是BaseDexClassLoader。在new一个PathClassLoader/DexClassLoader对象时就会调用其对应的构造函数,然后调用父类BaseDexClass
阅读全文
摘要:android应用程序启动流程 当在launcher进程(home进程)中点击一个应用的图标时其会调用startActivity,然后会通过Binder与system_server系统进程跨进程通讯。system_server会调用Process.start开始启动一个新进程。Process.sta
阅读全文
摘要:## java JVM中有三个初始的类加载器:引导类加载器BootStrapClassLoader,扩展类加载器ExterntionsClassLoader,应用程序类加载器ApplicationClassLoader。 * 引导类加载器BootStrapClassLoader是顶层类加载器,负责加
阅读全文
摘要:检测调试相关文件android_server等 int SearchFile(std::string file_path) { int ret = 0; // fork进程检测 std::string command = "cat "; command.append(file_path.c_str(
阅读全文
摘要:# android平台的ELF hook技术  ## LD_PRELOAD hook linker程序在对elf可执
阅读全文
摘要:android平台的so注入技术 LD_PRELOAD注入 LD_PRELOAD是linux的系统环境变量,因为android基于linux内核所以此环境变量依然存在。当linker初始化时会获取首先获取LD_PRELOAD指向的so库然后再获取elf文件的其他依赖库,所以LD_PRELOAD指向的
阅读全文
摘要:# dex文件格式 dex是android虚拟机的可执行字节码文件,java文件经过javac编译成class文件,class文件又被dx处理后生成dex文件。 ,arm指令为32位(4个字节)。
阅读全文
摘要:编译器 一般编译器分为前端,中间优化和后端三部分。前端进行语法分析,中间进行优化后由后端编译成对应平台(arm,x86)的汇编代码(机器码)。现在主流的编译器有linux平台下的gcc 和 llvm-clang,以及windows平台下的msvc编译器。 LLVM gcc编译器虽然强大但是有一个缺点
阅读全文
摘要:ollvm官方只更新维护到llvm的4.0版本,github上有大佬移植了高版本的llvm,链接为:https://github.com/heroims/obfuscator/tree/llvm-9.0.1 编译ollvm9.0.1 编译环境和ollvm4.0的编译环境一样,采用mingw64 +
阅读全文
摘要:说一下我的艰辛历程,整整编译了三四天,要么编译出来不能用,要么编译不了。。。。。。 # 工具 * mingw64:gcc编译器的windows版本 * ollvm4.0:官方版 * ndk:android studio中下载的ndk 16.1.4479499 # 设置环境 * 下载mingw64编译
阅读全文
摘要:ELF文件的导出表 windwos平台下的动态链接库dll文件会有导出表,对应的Linux/Android的so文件也会导出表。 IDA打开一个so文件,查看Exports会看到所有的导出函数(start默认导出) .dynsym符号表的最后就是导出表,其中Elf32_Sym.st_vlaue的值为
阅读全文