2013年9月12日

【随记】Smali注入中Sleep代码注入

摘要: 有时候比如想调试一个加载SO之后的代码,苦于SO只会在初始化时候加载上一次,等你把IDA Attach上之后就没了。可以考虑一下插入一个SMALI延时的代码,仿照Windows的Sleep函数(时延20秒):android.os.SystemClock.sleep(20000);其对应的SMALI也相当简单,就一句话:const-wide/16 v0, 0x2710 invoke-static {v0, v1}, Landroid/os/SystemClock;->sleep(J)V这里的v1其实是相对.locals 2而言的,如果.locals 4,那么就是v3了 阅读全文

posted @ 2013-09-12 10:03 堕落华为人 阅读(1016) 评论(0) 推荐(0) 编辑

2013年9月10日

【随记】Smali注入中利用Toast查看String

摘要: Android下面的代码:Toast.makeText(this, "test", Toast.LENGTH_LONG).show();对应的SMALI CODE为: const-string v4, "test" const/4 v5, 0x1 invoke-static {p0, v4, v5}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast; move-result-object 阅读全文

posted @ 2013-09-10 16:51 堕落华为人 阅读(1816) 评论(0) 推荐(0) 编辑

2013年9月6日

【随记】Smali注入中查看int和boolean的方法

摘要: 查看int,将变量转为String查看,需要添加2个寄存器: #sget v0, Landroid/os/Build$VERSION;->SDK_INT:I const-string v2, "testout" invoke-static {v0}, Ljava/lang/Integer;->toString(I)Ljava/lang/String; move-result-object v3 invoke-static {v2, v3}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String; 阅读全文

posted @ 2013-09-06 16:46 堕落华为人 阅读(1565) 评论(0) 推荐(0) 编辑

2013年9月3日

SMALI注入中新增调试日志输出

摘要: 针对Android中Smali代码逆向分析,由于现在调试技术有限,一种相对简单的办法是在Smali中加入Log输出: const-string v3, "a" invoke-static {v3, v2}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I这里面有几个需要注意的问题:1、v3或者自定义的其它寄存器,有可能被用于它用了处理方法:(1)选用一个在后面会重新赋值的寄存器: .line 27 const-string v3, "a" invoke-static {v3, 阅读全文

posted @ 2013-09-03 14:50 堕落华为人 阅读(2490) 评论(0) 推荐(0) 编辑

2013年8月30日

逆向CodeInjectEx发现“直接代码注入”中未曾考虑过的“retn 4”

摘要: 今天在看一个WG教程中,作者提到了两个工具:CE和CodeInjectEx。CE算是老朋友了,CodeInjectEx虽然我以前没有用过,不过其原理多少知道一些。下载CodeInjectEx(郁金香代码注入工具)后我简单想了一下:代码注入包括两类,DLL和ASM CODE直接代码注入。DLL注入的代码网上到处都是,一般常用办法是CreateRemoteThread,在远程进程中启动线程执行LoadLibrary加载dll。CreateRemoteThread函数原型如下:WINBASEAPIHANDLEWINAPICreateRemoteThread( HANDLE hProcess, ... 阅读全文

posted @ 2013-08-30 03:04 堕落华为人 阅读(795) 评论(0) 推荐(0) 编辑

2013年8月29日

如何判断一个APP运行于Android模拟器

摘要: 也是出于感兴趣,类似于我们有时候不希望自己的程序运行在Windows虚拟机一样,有时候也有人会会关心自己写的APP是否运行于Android模拟器下面以下是网上2种讨论最多的办法:(1)判断IMEI public static boolean isEmulatorByImei(Context context){ TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); String imei = tm.getDeviceId();... 阅读全文

posted @ 2013-08-29 18:29 堕落华为人 阅读(6405) 评论(0) 推荐(0) 编辑

【面试题】递归法求字符串长度

摘要: 背景:曾经面试一个游戏公司面试官问书写代码如下:unsigned int getStrLength(char* str){ if( str == NULL || str == (char*)-1 ) return -1; if(*str == '\0') return 0; else return getStrLength(str+1)+1;}在网上简单查一下,好像一般大家也不怎么判断传入指针为空或者全F的情况,我想加一个作为判断或许好一点吧。 阅读全文

posted @ 2013-08-29 13:35 堕落华为人 阅读(275) 评论(0) 推荐(0) 编辑

2013年8月26日

abs函数的实现

摘要: abs函数即取一个整形数的绝对值,今天在IDA查看cygwin的实现时候发现其实现过程,这里总结三种情况(感觉这类型东西也很适合用于笔试或面试):(1)带if分支的利用补码特性:正数的补码和原码相同;负数的补码是:补码=~(其正数的)原码+1。因此如果是负数求绝对值可以:(绝对值)原码=~(补码-1)int _abs(signed int i){ if (i0?p:-p;}(3)不带if分支(判断分支)的位运算:我是从cygwin中逆向得到的代码int __cdecl _abs(signed int i){ return ((i >> 31) ^ i) - (i >> 阅读全文

posted @ 2013-08-26 19:11 堕落华为人 阅读(2287) 评论(2) 推荐(1) 编辑

导航