2016年9月25日星期日

Shadowsocks 的定制和 “不安全性” 的分析

用 Shadowsocks 有很长一段时间了,确实非常好用,速度不错而且能够满足很多工作中的需求。之前也只是一直用着没有做过多的分析,直到最近看见 ShadowsocksR 这个非官方的项目发现 Shadowsocks 稍做修改便能够实现定制化,比较方便。 SS 的工作流程图下图所示: 流程图中其实显示的很清楚了,要定制自己的 Shadowsocks 服务只需要对 # 2 处的代码进行相应的混淆,而在 # 3 处进行反混淆即可,通过看 SS 代码可以看到这部分的内容在 shadowsocks/tcprelay.py 文件定义的类 TCPRelayHandler 方法 _handle_stage_stream()...
Read More

2016年9月17日星期六

ASM 逆向学习笔记 (一)- 汇编基础

因为安卓逆向时而需要分析在 .so 文件中定义的 natvie 函数,所以对汇编的指令伪代码也需要进行学习,在《Android软件安全与逆向分析》中的第六章针对部分指令有所讲述,不过例子感觉举的不太充分,下面对部分内容做一个备忘。 Register R0 ~ R3 :用作传入函数参数,传出函数返回值,比方说 test 函数需要两个参数一个返回值,那么即使用 R0、R1 作为函数的参数,返回值保存在 R0 里。在子程序调用之间,可以将 R0 ~ R3 用于任何用途。 被调用函数在返回之前不必恢复。如果调用函数需要再次使用 R0 ~ R3 的内容,则它必须保留这些内容。 R4 ~ R11 :用作存放函数的局部变量,作用域是单个子程序。如果被调用函数使用了这些寄存器,它在返回之前必须恢复这些寄存器的值。在程序运行过程中,编译器会自动保护R4~R11。 R12:内部调用暂时寄存器...
Category:
Read More

ANDROID 逆向学习笔记 (三)- IDA 动态调试 so

前面几篇所说的均是对安卓进行 smali 静态分析的内容,本节探讨一下动态的调试和分析,将会使用到的是 IDA Pro (金山 leak)和 Android Studio 的部分工具(模拟器,ddms,adb 等)。 Android Studio 的官方网址是: https://developer.android.com/studio/intro/index.html,可以找到不同系统的版本,下载并安装好了之后在 ~/Library/android/sdk/tools 路径下可以找到安卓开发调试所需要的各种小工具。 安装好之后启动 Android Studio 找到 AVD...
Read More

2016年9月12日星期一

ANDROID 逆向实例(一)- acce3ft.aevbbb

对于恶意软件不进行打码处理了,网址是 http://hpwxn.com/ 浏览之后可以下载两个 apk ,不过从文件大小来看应该是一个文件只不过进行了改名。 一般这种恶意软件既不会加壳也不会做复杂的混淆处理,分析起来很简单。直接反编译看 AndroidManifest.xml,找到如下一行。 <activity android:label="@string/app_name" android:name="acce3ft.aevbbb.MainActivity"> 可以看到程序的 MainActivity, 直接看 acce3ft/aevbbb/MainActivity.smali...
Read More

2016年9月5日星期一

ANDROID 逆向学习笔记 (二)- Smali 和 Dalvik

上一篇文章说到了 apk 解压得到 classes.dex 再反编译得到 smali 代码文件,那么这个关键的 classes.dex 是什么呢?提到 .dex 那么就会想到 Dalvik,Dalvik 是谷歌专门为安卓设计的虚拟机而 .dex 之于 Dalvik 就相当于 Windows 里的 .exe,是 Dalvik 可以直接执行的格式所以分析 .dex 文件是安卓逆向很重要的一部分。 关于 Dalvik 存在的意义、运行方式和 JVM 虚拟机之间差异的问题感兴趣的可以自行搜索了解,另外在高版本的安卓系统中,谷歌已经使用 ART 代替了 Dalvik 为实现更高的效率,可能存在部分差异,后续文中如果没有特殊说明均是针对 Dalvik。 因为 classes.dex 是运行在 Dalvik 的可执行文件,所以是否熟悉 Dalvik 的操作指令是决定我们阅读反编译文件快慢的重要因素。Dalvik...
Read More

2016年9月1日星期四

ANDROID 逆向学习笔记 (一)- smali 简单介绍

由于 Web 安全相对来二进制来说更容易上手,最早的时候选择了相对简单的路。随着接触的时间变长,感觉局限于 Web 而抵触二进制实在狭隘,同时也是生活的百无聊赖给了充足的时间,开始尝试学一些新的事物。 在此之前没有接触过安卓或者是 Java 方面的内容,学起来难免有些迟钝,不过好在时间很多~ OK,闲扯到此结束,q 我是通过《Android 软件安全与逆向分析》这本书结合网上的资源(Drops/Pediy/博客)来开始学习的。书能够给予部分基础知识的详解,而网上的资源则大多偏向于实践,针对具体某个apk进行分析,结合起来学习加上自己亲身实践效果很好。不过有一点需要指出的是《Android 软件安全与逆向分析》中的内容并不完全正确,有描述不准确或是明显有错误的地方最好是多印证。 BTW,为了节省时间部分显而易见的地方只做简单的文字说明,可以通过自己实践或者是简单的搜索解决问题,除非必要关键的地方不上传步骤图。另外本文中操作系统为...
Read More