-
-
[原创]VirtualApp无脑脱某0的壳
-
发表于:
2017-3-27 22:20
13875
-
测试例子就用http://bbs.pediy.com/thread-213214.htm这个帖子的例子了,前面我已经介绍过了这个项目是个虚拟引擎,其实可以做很多事,那么我们怎么利用这个项目来脱壳呢?
其实很简单,就是利用Hook.
前面的帖子里介绍过了各种反调试啊,然后不停的找之类的,那么我们不这样做。我们只Hook打印日志,看看能得到什么信息。
我们需要hook哪些函数呢?
mprotect
mmap
open
munmap
memcmp
这个五个函数,先hook起来,然后把参数打印一遍即可。
这样我们就可以得到一个加壳App的执行流程。
HOOK_SYMBOL(RTLD_DEFAULT,mprotect);
HOOK_SYMBOL(RTLD_DEFAULT,mmap);
HOOK_SYMBOL(RTLD_DEFAULT,open);
HOOK_SYMBOL(RTLD_DEFAULT,munmap);
HOOK_SYMBOL(RTLD_DEFAULT,memcmp);
在日志当中我们看到这样的一段日志。
open了一个2.dex
调用libart当中的
art::EncodedStaticFieldValueIterator::ReadValueToField
这个函数。
所以这个2.dex很可能就是脱壳之后的dex。
我们在memcpy当中这样hook
HOOK_DEF(int,memcmp,const void *buf1, const void *buf2, unsigned int count){
//LOGD(">>>>> memcmp >>> start: %s, size_t: %d", buf1, count); int ret = orig_memcmp(buf1, buf2,count); if(!ret && strstr((char*)buf2,"dex"))
{
int size = *(int*)((int)buf1+0x20); LOGD(">>>>> in >>>>>> memcmp >>> start: %s, size_t: %d", buf2, size); if(size == 687136) {
// HexDump((char *) buf1, size, (int) buf2); FILE* fp = fopen("/sdcard/1.dex","w"); fwrite(buf1,size,1,fp); fflush(fp); fclose(fp); }
}
return ret;}
先将这个dex给保存下来。
然后分析,里面就会出现oncrate函数 是native的了。
接下来如何分析得到这个oncrate函数的函数体呢?
我们是不是可以hook env的注册方法?
[课程]FART 脱壳王!加量不加价!FART作者讲授!