BruceFan's Blog

Stay hungry, stay foolish

0%

本文主要介绍Android动态加载jar的技术,如何开发一个可以自定义控件的Android应用?就像eclipse一样,可以动态加载插件;如何让Android应用执行服务器上的不可预知的代码?如何对Android应用加密,而只在执行时自解密,从而防止被破解?这篇文章是一个基础,后面的一些文章会以此继续深入。

阅读全文 »

运行时间
评估算法的性能。首先,要计算各个排序算法在不同的随机输入下的基本操作的次数(包括比较和交换,或者是读写数组的次数)。然后,我们用这些数据估计算法的相对性能。
额外的内存使用
排序算法的额外内存开销和运行时间是同样重要的。排序算法可分为两类:除了函数调用所需的栈和固定数目的实例变量之外无需额外内存的原地排序算法,以及需要额外内存空间来存储另一份数组副本的其他排序算法。

阅读全文 »

基于线程的并发编程

线程(thread)就是运行在进程上下文中的逻辑流。线程由内核自动调度。每个线程都有它自己的线程上下文(thread context),包括一个唯一的整数线程ID(Thread ID,TID)、栈、栈指针、程序计数器、通用目的寄存器和条件码。所有运行在一个进程里的线程共享该进程的整个虚拟地址空间。

阅读全文 »

ptrace on Android

无论是hook还是调试都离不开ptrace这个system call,ptrace可以跟踪目标进程,并且在目标进程暂停的时候对目标进程的内存进行读写。
首先看一下要ptrace的目标程序,用来一直循环输出一句话”Hello, Hooking!”

阅读全文 »

radare2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ radare2 -h # 查看帮助
$ r2 -d file # 调试一个文件
> d? #显示调试命令
|Usage: d # Debug commands
| db[?] Breakpoints commands
| dc[?] Continue execution
| dm[?] Show memory maps
| dr[?] Cpu registers
...
> v # 进入visual mode,q退出;
# c可以显示一个游标;
# 按shift加hjkl可以选中;
# visual mode中可以用i来overwrite字节;
# p/P切换其他visual mode view;
# s - step into,S - step over当前指令;
# b下断点;
# : 可以在visual mode中输入常规的radare命令
阅读全文 »

Android代码调试

与Java一样,Dalvik实现了一个标准的调试接口,称为Java调试线协议(Java Debug Wire Protocol, JDWP)。所有用来调试Dalvik和Java上的程序的工具都是基于此协议开发的。 深入Java调试体系
Android设备监视器(Monitor)和Dalvik调试监视服务器(DDMS)都采用了JDWP标准协议,它们用JDWP访问指定应用的信息(线程、堆使用情况、正在进行的方法调用)

阅读全文 »

Register
from r0 to r15
r0 is used as a return value of functions
r11 is used like EBP (called FP)
r12 intra-procedure-call scratch register (called IP)
r13 is used like ESP (called SP)
r14 is Link-Register (called LR)
r15 is used like EIP (called PC)
all register are completely general, you can set a value to r15 directly
ldr r1, [pc] ;(pc point to ‘.long 0x00001337’)
b go_next
.long 0x00001337

阅读全文 »

编译原生程序:

  • 使用gcc编译器写makefile文件手动编译
  • 使用ndk-build工具自动编译

工具

path_to/android-ndk-r10c/toolchains/arm-linux-androideabi-4.9/prebuilt/ darwin-x86_64/bin目录下保存着完整的工具链:
arm-linux-androideabi-g++ C++编译工具
arm-linux-androideabi-gcc C编译工具
arm-linux-androideabi-gdb 调试工具
arm-linux-androideabi-ld 链接器,用于生成可执行程序
arm-linux-androideabi-nm 列出目标文件中的符号
arm-linux-androideabi-objdump 输出目标文件的信息
arm-linux-androideabi-readelf 显示elf格式可执行文件信息
arm-linux-androideabi-size 列出目标文件每一段的大小
arm-linux-androideabi-strings 列出目标文件的可打印字符串
arm-linux-androideabi-strip 去除目标文件中的符号信息

阅读全文 »