Author Archives: nevermoe

Bypass ffmpeg的ssl certificate check

0x00 背景

最近在做一个项目,我想使用burp截获ffmpeg发送的请求,但是发现即使我在客户端上装上了burp的CA证书,也还是会出现ssl handshake error。于是我将ffmpeg进行了一下bianry patch,disable了ffmpeg的证书检证。在0x01中我将介绍如何patch,在0x02中我将分析一下为何在客户端上安装了burp的CA证书还是会出现ssl握手错误。
Continue reading

如何在release build的iOS app上debug webview

0x00 背景

大家知道,在mac上用safari的web inspector可以远程dedug iphone 的safari或者app的内置webview。iphone的safari是任何时候都可以被debug(前提当然是iphone的设置允许了web inspector),但是app内置的webview并不是总能被debug的,如果app是release build的,那么它内置的webview就不能被debug。

为了解决这个问题,如果你有一台越狱了的iphone,则可以通过重新打包ipa文件使得app内置的webview可以被debug。
Continue reading

valgrind on Android

0x00 背景


//下面的方法程序会crash。。。

0x01 方法

  1. 下载googlesamples并编译安装hello-jni到android作为目标程序。

  2. 下载valdroid并push到手机的/data/local/valdroid/目录里。

  3. 创建这两个脚本,并执行sh bootstrap_valgrind.sh
    //bootstrap_valgrind.sh

#!/usr/bin/env bash

PACKAGE="com.example.hellojni"

adb push start_valgrind.sh /data/local/valdroid
adb shell su -c "chmod 777 /data/local/valdroid/start_valgrind.sh"


adb shell su -c "setprop wrap.$PACKAGE 'logwrapper\ /data/local/valdroid/start_valgrind.sh'"

echo "wrap.$PACKAGE: $(adb shell getprop wrap.$PACKAGE)"

adb shell am force-stop $PACKAGE
adb shell am start -a android.intent.action.MAIN -n $PACKAGE/.HelloJni

adb logcat -c
adb logcat

exit 0 

//start_valgrind.sh

#!/system/bin/sh

PACKAGE="com.example.hellojni"

# Callgrind tool
VGPARAMS='-v --error-limit=no --trace-children=yes --log-file=/data/local/valdroid/valgrind.log.%p --tool=callgrind --callgrind-out-file=/data/local/valdroid/callgrind.out.%p'

# Memcheck tool
# VGPARAMS='-v --error-limit=no --trace-children=yes --log-file=/sdcard/valgrind.log.%p --tool=memcheck --leak-check=full --show-reachable=yes'

export TMPDIR=/data/data/$PACKAGE

exec /data/local/valdroid/bin/valgrind $VGPARAMS $* 
  1. /data/local/valdroid/就可以看到valgrind.out.xxxxcallgrind.out.xxx这两个log文件了。

从零编写Android Hook Framework

0x00 背景

最近想做一个安卓的hook framework,来进行dynamic binary instrumentation。看了一些教程,完成了一部分工作。

主要是参考zhengmi大神的文章安卓动态调试七种武器之离别钩 – Hooking(上)安卓动态调试七种武器之离别钩 – Hooking(下)adbi的源代码修改的。

0x01 原理

hook原理参照zhengmi大神的文章就可以理解,我简单总结一下:

  1. 首先启动一个进程,然后ptrace想要hook的目标进程。我们启动的进程不妨称之为tracer,被hook的目标进程称之为tracee。
  2. tracer通过控制tracee的pc寄存器来使tracee调用dlopen函数来加载自己预先编译好的so文件,这个so文件里存放着我们想要注入的函数,不妨称这个so文件为libinject.so。
  3. 在tracee加载完libinject.so之后,再次利用tracer控制tracee的pc寄存器,调用libinject.so里的init函数(init函数的地址可以通过dlsym来查找)。
  4. init函数中主要做的事是:把tracee中需要hook的函数地址的头几个字节全部替换为类似于jmp的命令,使得tracee在执行到被hook的函数时(不妨称这个函数为hookee)可以跳转到libinject中我们自己替换的函数处执行(称之为hooker)。
  5. 在hooker函数中,我们首先可以做一些自己的处理(pre_hook),然后需要将hookee的头几个字节复原,再重新调用hookee,之后可以做一些自己想做的post_hook处理。最后记得将hookee的头几个字节再次替换为jmp命令,以便下次执行到hookee的时候还能跳转到自己的hooker函数。

Continue reading