
安卓
melon_eater
这个作者很懒,什么都没留下…
展开
-
深入理解dex文件结构
【本文转载自http://blog.youkuaiyun.com/sinat_18268881/article/details/55832757#comments】DEX文件就是Android Dalvik虚拟机运行的程序,关于DEX文件的结构的重要性我就不多说了。下面,开练!建议:不要只看,跟着我做。看再多遍不如自己亲自实践一遍来的可靠,别问我为什么知道。泪崩ing.....首先,我转载 2017-02-23 01:14:59 · 709 阅读 · 1 评论 -
安卓逆向之陕西网络安全大赛第三题
题目下载链接: 下载题目,安装,直接闪退,扔到jeb看看 这里新开了一个线程调用了finish方法,不管什么条件下调用的,我们禁止这个方法运行,反编译删除对应的smali即可 然后来看看逻辑: 使用encrypt对输入的字符串进行了验证,通过查看,这个encrypt函数在native层,扔进ida,将ida识别的函数类型错误的了进行修复: **经过分析,v18是我们输入的字原创 2017-06-20 18:05:09 · 509 阅读 · 1 评论 -
安卓逆向之华山杯ctf第一题:错错错
题目打开是这样的,有个序列号,然后根据这个序列号生成一个注册码,然后输入即可解锁。 首先我们,这个序列号是不停更新的,所以我们需要先反编译,将其变化的周期改长一些:点击提交按钮的代码逻辑是这样的: 调用了encryption01.MyEncryption()函数,用输入的注册码和这个函数的返回值相比较,一般的思路就是开始看着搞函数的加密算法,但是我们看看smali代码: 这里将encr原创 2017-06-17 15:42:34 · 521 阅读 · 0 评论 -
安卓逆向之华山杯ctf第二题:寻找密码
安装后打开是这样的: 输入用户名和密码登陆扔进jeb里看看: 加壳了,看看是如何动态加载的: **依次调用了readDexFileFromApk()–>splitPayLoadFromDex() 第一个函数先将apk解压,将里边的dex文件读入到一个byte[]里,重点在splitPayLoadFromDex()函数:** int v5 = arg25.leng原创 2017-06-17 16:19:45 · 1403 阅读 · 0 评论 -
安卓逆向之华山杯ctf第四题:神奇的zip
拿到这个题,apk无法安装,拖到jeb里也无法反编译,试了一下zip伪加密,将504B0102后边的第五第六个字节都改成偶数,两处需要修改: 然后安装就能打开了。**首先打开有个闪屏:提示未获取权限 5秒之后就退出了 这里有三种解决方法: 第一种:最简单的方法** **manifest文件中注册了两个activity,打开的闪屏的是主activity,我们的目的是打开MainActi原创 2017-06-17 18:10:15 · 1274 阅读 · 0 评论 -
JNI中文手册
PS一句:最终还是选择优快云来整理发表这几年的知识点,该文章平行迁移到优快云。因为优快云也支持MarkDown语法了,牛逼啊!【工匠若水 http://blog.youkuaiyun.com/yanbober】 阅读前一篇《NDK-JNI实战教程(一) 在Android Studio运行第一个NDK程序》 http://blog.youkuaiyun.com/yanbober/article/details转载 2017-04-12 09:43:37 · 2200 阅读 · 0 评论 -
对好搜小说app哈希算法的一次逆向
我用的好搜小说版本是1.8.183,需要测试的请自行下载点击一个小说,抓包之,在androidKill中搜索关键字encode_sign 打开关键字所在的类;进去查看,在静态代码块加载了个动态链接库,核心的加密算法写在了native层上IDA,进行动态调试,将断点下在urlEncodeFromJNI这个方法处:然后手机上点击一部小说,运行到s原创 2017-03-22 18:06:10 · 1310 阅读 · 0 评论 -
arm汇编函数调用参数传递规则
1. 子程序通过寄存器R0~R3来传递参数. 这时寄存器可以记作: A0~A3 , 被调用的子程序在返回前无需恢复寄存器R0~R3的内容. 2. 在子程序中,使用R4~R11来保存局部变量,这时寄存器R4~R11可以记作: V1~V8 .如果在子程序中使用到V1~V8的某些寄存器,子程序进入时必须保存这些寄存器的值,在返回前必须恢复这些寄存器的值,对于子程序中没有用到的寄存器则不必执行转载 2017-03-07 21:17:35 · 5282 阅读 · 0 评论 -
dalvik机器码对照表
Dalvik虚拟机操作码作者:Gabor Paller 翻译:YULIANGMAXv1.0表中的vx、vy、vz表示某个Dalvik寄存器。根据不同指令可以访问16、256或64K寄存器。表中lit4、lit8、lit16、lit32、lit64表示字面值(直接赋值),数字是值所占用位的长度。long和double型的值占用两个寄存器,例:一个在v0寄存器的double值转载 2017-02-26 10:44:07 · 1153 阅读 · 0 评论 -
安卓测试中,如何知道当前的activity的名字?
最简单的方法是使用adb去看,但是这个每次切换一次,就得手动一次,于是做了个自动的简单工具原理:工具后台运行一个服务,不停的去查看当前acivity栈栈顶的activity,并将其使用logcat打印出来。服务部分代码:import android.app.Service;import android.content.Context;import android.content.I原创 2017-02-15 22:56:45 · 1406 阅读 · 0 评论 -
genymotion+virtualbox启动失败解决方案
virtualbox错误:Failed to instantiate CLSID_VirtualBox w/ IVirtualBox, but CLSID_VirtualBox w/ IUnknown works.PSDispatch looks fine. Weird.genymotion错误:unable to start virtual device解决:HKEY_CLA原创 2017-02-24 10:42:37 · 1109 阅读 · 0 评论 -
arm汇编指令
一. 带点的(一般都是ARM GNU伪汇编指令)1. ".text"、".data"、".bss"依次表示的是“以下是代码段”,“以下是初始化数据段”,“以下是未初始化数据段”。2.".global"定义一个全局符号,通常是为ld使用。比如经常看到的.global _start3.".ascii"、".byte"、".shor转载 2017-03-02 21:05:45 · 464 阅读 · 0 评论 -
安卓下反调试方案汇总
Android反调试1.调试端口检测读取/proc/net/tcp,查找IDA远程调试所用的23946端口,若发现说明进程正在被IDA调试。void CheckPort23946ByTcp(){ FILE* pfile=NULL; char buf[0x1000]={0}; // 执行命令 char* strCatTcp= "cat /proc/net/tcp |g原创 2017-12-15 21:36:22 · 2075 阅读 · 0 评论