看雪安全论坛 > 移动平台 > 『Android 安全』
 【原创】逆向Android SO,以《遇见》App为例
用户名 记住
密 码 忘记密码?
KSSD
注册账号 搜索论坛 日历事件 论坛帮助
 
第 1 页,共 2 页 1 2 >
  
主题工具  显示模式 
杨剑超


普通会员
资 料:

注册日期: Jan 2015
帖子: 111 
精华: 1
现金: 14 Kx
致谢数: 0
获感谢文章数:2
获会员感谢数:10

1  2015-04-14, 14:21:18  已解答: 【原创】逆向Android SO,以《遇见》App为例

工具:IDA6.6,不会发图,只能用文字描述了。
研究过《遇见》登录的同学可能都知道,只要修改过APK,在登录时都会提示软件盗版。
经研究登录时safecode字段有问题,可能是验证了签名。在libiaroundnet.so中Java_net_iaround_utils_NativeLibUtil_aaa实现。

步骤1:下载  http://gdown.baidu.com/data/wisegame...yujian_570.apk
将yujian_570.apk改名为yujian_570.zip,将lib目录下的lib\armeabi\libiaroundnet.so提取出来拖入IDA中。

步骤2:
    拖进来后发现SHA1Input,SHA1Output这样带有SHA1的函数,断定SO中用到了SHA1加密算法。

步骤3:
    查看Java_net_iaround_utils_NativeLibUtil_aaa函数按F5出来C的伪代码,此时代码还不易读懂,不如像“v9 = (*(int (**)(void))(v8 + 124))()”,这样的代码。但是看到这个我们是不是应该想到C++里面的内存的寻址?,成员变量的首地址=对象的首地址+成员变量在类中的偏移.
假如
Struct node
{
      int,x,y;
};
node a;如果A的首地址是0x00000000,那么a.x的地址是0x00000000,a.y的地址是0x00000004;
由C伪代码我们不难得出:v8是JNIEnv *类型,查看jni.h并计算我们不难发现v8 + 124是GetObjectClass函数指针,同理我们可以计算出其他类似的调用。

步骤4:
     有了步骤三的基础,我们可以想到一个简便的方法就是导入jni.h,从而确定JNIEnv类的结构,借助IDA直接识别函数。下载jni.h(虫大大书上修改JNI.H的方法貌似不好使,我自己改了个):http://pan.baidu.com/s/1sj3EaTn,然后File->Load File->parse C header file... 选择下载好的jni.h确定。然后在structures页面里按下insert键
->add standard structure->滑到最下方选择"JNIEnv_",然后确定。

步骤5:
    返回伪代码界面,鼠标点击Java_net_iaround_utils_NativeLibUtil_aaa的第一个参数,右键->convert to struct*->选择jnienv_*,这时,伪代码中不明函数的调用已经出来。
刚刚的(*(int (**)(void))(v8 + 124))()已经变成 ((int (*)(void))v8->GetObjectClass)();
这时只要仔细阅读伪代码就知道该函数做了啥,逆向的C代码为:

代码:
JNIEXPORT jstring JNICALL Java_net_iaround_utils_NativeLibUtil_aaa
(JNIEnv *env, jobject ob, jobject paramContext, jobject paramPackageInfo, jstring paramString1, jstring paramString2)
{SHA1Context context;jstring ret=0;JNIEnv* p_env=env;char cifferbuf[128]={0};char buf[64]={0};jclass obClass=env->GetObjectClass(ob);char *pString="()Ljava/lang/String;";jmethodID  reusltID=p_env->GetMethodID(obClass,"getPackageName","()Ljava/lang/String;");jobject retObject=p_env->CallObjectMethod(paramContext,reusltID);jboolean boolean=0;const char *str=p_env->GetStringUTFChars((jstring)retObject,&boolean);bool cmpResult=strcmp("net.iaround",str);if(cmpResult==0){ret=p_env->NewStringUTF("123456");}else{char destBuffer[128]={0};const char* s1=p_env->GetStringUTFChars(paramString1,&boolean);const char *s2=p_env->GetStringUTFChars(paramString2,&boolean);__android_log_print(4, "logfromc", "%s",s1);__android_log_print(4, "logfromc", "%s",s2);int len1=strlen(s1);int len2=strlen(s2);memcpy(destBuffer,s1,len1);memcpy(destBuffer+len1,s2,len2);jclass packageInfo= p_env->GetObjectClass(paramPackageInfo);ret=(jstring)packageInfo;if(packageInfo){jfieldID signatures=p_env->GetFieldID(packageInfo,"signatures","[Landroid/content/pm/Signature;");ret=(jstring)signatures;if(signatures){jobjectArray sigarray=(jobjectArray)p_env->GetObjectField(paramPackageInfo,signatures);if(sigarray){jsize sigLength=p_env->GetArrayLength(sigarray);if(sigLength>0){jobject ob=p_env->GetObjectArrayElement(sigarray,0);if(ob){jclass jc=p_env->GetObjectClass(ob);if(jc){jmethodID id=p_env->GetMethodID(jc,"toCharsString","()Ljava/lang/String;");if(id){jstring sigString =(jstring)p_env->CallObjectMethod(ob,id);const char* sigStr=p_env->GetStringUTFChars(sigString,&boolean);int passLen=strlen(destBuffer);memcpy(cifferbuf,sigStr+16,32);//__android_log_print(4, "logfromc", "%s",sigStr+16);//memcpy(cifferbuf,"a00302010202044e549d3a300d06092a",32);memcpy(cifferbuf+32,destBuffer,passLen);__android_log_print(4, "logfromc", "cifferString:%s",cifferbuf);SHA1Reset(&context);int cifferlen=strlen(cifferbuf);SHA1Input(&context,cifferbuf,cifferlen);//memset(&v51, 48, 0x29u);memset(buf,0,sizeof(buf));if(SHA1Result(&context)){sprintf(buf, "%08X%08X%08X%08X%08X", context.Message_Digest[0],context.Message_Digest[1],context.Message_Digest[2],context.Message_Digest[3],context.Message_Digest[4]);}else{__android_log_print(4, "logfromc", "ERROR-- could not compute message digest\n");}ret=p_env->NewStringUTF(buf);}}}}}}}}return ret;
}

这时代码的意图就明显了
一句话概括就是:将签名中取出32位+paramString1+paramString2后用SHA1加密
                        如果中途出错,直接返回“123456”。。。

这时可以得出该APK包是利用了签名加密后到服务器验证的。服务器计算出safecode和收到的safecode不一样时,反馈软件盗版。。

此贴只供学习,如做其它用途,后果自负。

 

[公告]如果你觉得有人语言挑衅,请点每帖右上角的“举报”按钮!

 

共 7 位会员
感谢 杨剑超 发表的文章:
bengou (2015-04-17), leeven超人 (2015-11-23), Lnju (2015-04-18), sunwood (2015-06-11), weishi (2016-01-13), zhczf (2015-04-18), 雪衫 (2015-04-18)
最佳答案 - 作者: 杨剑超
在哪删帖,我要删帖!!!!!!!!!!!!!!!!!!!!!
杨剑超


普通会员
资 料:

注册日期: Jan 2015
帖子: 111 
精华: 1
现金: 14 Kx
致谢数: 0
获感谢文章数:2
获会员感谢数:10

2  2015-04-14, 19:59:42 

在哪删帖,我要删帖!!!!!!!!!!!!!!!!!!!!! 
 

[公告]如果你觉得有人语言挑衅,请点每帖右上角的“举报”按钮!

 

exile


普通会员
资 料:

注册日期: Jun 2007
帖子: 1,203 
精华: 1
现金: 2074 Kx
致谢数: 24
获感谢文章数:36
获会员感谢数:36

3  2015-04-14, 20:41:05 

点一下编辑就行了 哈哈 被警告了吧 
 

[培训]15PB软件安全培训,看雪会员有优惠!

 

杨剑超


普通会员
资 料:

注册日期: Jan 2015
帖子: 111 
精华: 1
现金: 14 Kx
致谢数: 0
获感谢文章数:2
获会员感谢数:10

4  2015-04-15, 11:56:29 

引用:
最初由 exile发布 

点一下编辑就行了 哈哈 被警告了吧

那倒是没有,感觉这个我技术太水了。。想技术好点以后再出来发贴

 

[培训]15PB软件安全培训,看雪会员有优惠!

 

exile


普通会员
资 料:

注册日期: Jun 2007
帖子: 1,203 
精华: 1
现金: 2074 Kx
致谢数: 24
获感谢文章数:36
获会员感谢数:36

5  2015-04-15, 13:02:32 

引用:
最初由 杨剑超发布 

那倒是没有,感觉这个我技术太水了。。想技术好点以后再出来发贴

我觉得你写的挺好的

 

[培训]科锐逆向培训!看雪会员减免200元!

 

cnywco

初级会员
资 料:

注册日期: Nov 2005
帖子: 75 
精华: 0
现金: 179 Kx
致谢数: 0
获感谢文章数:0
获会员感谢数:0

6  2015-04-18, 09:21:49 

写的很不错啊。、 
 

[公告]如果你觉得有人语言挑衅,请点每帖右上角的“举报”按钮!

 

杨剑超


普通会员
资 料:

注册日期: Jan 2015
帖子: 111 
精华: 1
现金: 14 Kx
致谢数: 0
获感谢文章数:2
获会员感谢数:10

7  2015-04-18, 09:47:30 

引用:
最初由 cnywco发布 

写的很不错啊。、

你要导入JNI.h,识别JNIENV的数据结构,然后自己阅读代码,才能理解,上面是我根据我的理解重新写的。

PS:我KX不够,不能和你悄悄话

 

[公告]如果你觉得有人语言挑衅,请点每帖右上角的“举报”按钮!

 

elianmeng

普通会员
资 料:

注册日期: Sep 2008
帖子: 611 
精华: 1
现金: 994 Kx
致谢数: 0
获感谢文章数:4
获会员感谢数:5

8  2015-04-18, 10:10:25 

MARK 
 

[培训]科锐逆向培训!看雪会员减免200元!

 

zhczf

初级会员
资 料:

注册日期: Feb 2007
帖子: 274 
精华: 0
现金: 199 Kx
致谢数: 388
获感谢文章数:0
获会员感谢数:0

9  2015-04-18, 10:49:08 

这么好的技术文章,就不要删除了 
 

[培训]科锐逆向培训!看雪会员减免200元!

 

Lnju


普通会员
资 料:

注册日期: Dec 2014
帖子: 32 
精华: 1
现金: 49 Kx
致谢数: 16
获感谢文章数:1
获会员感谢数:1

10  2015-04-18, 17:19:22 

学习了  感谢分享!! 
 

[培训]科锐逆向培训!看雪会员减免200元!

 

cqzhou

初级会员
资 料:

注册日期: Dec 2010
帖子: 100 
精华: 0
现金: 10 Kx
致谢数: 3
获感谢文章数:1
获会员感谢数:1

11  2015-04-18, 22:02:32 

不错哦 继续加油 
 

[培训]15PB软件安全培训,看雪会员有优惠!

 

vVv一


初级会员
资 料:

注册日期: Aug 2014
帖子: 25 
精华: 0
现金: 75 Kx
致谢数: 0
获感谢文章数:0
获会员感谢数:0

12  2015-04-18, 22:10:42 

赞一个    长知识了~ 
 

[培训]科锐逆向培训!看雪会员减免200元!

 

fanweiriu

初级会员
资 料:

注册日期: Jun 2008
帖子: 16 
精华: 0
现金: 147 Kx
致谢数: 0
获感谢文章数:0
获会员感谢数:0

13  2015-04-30, 09:28:19 

这个也就是通过c++部分再回调java的 
 

[公告]如果你觉得有人语言挑衅,请点每帖右上角的“举报”按钮!

 

chmlqw

初级会员
资 料:

注册日期: May 2009
帖子: 24 
精华: 0
现金: 55 Kx
致谢数: 21
获感谢文章数:0
获会员感谢数:0

14  2015-05-13, 16:51:15 

貌似IDA6.6 自动导入了jni.h这个文件了 
 

[公告]如果你觉得有人语言挑衅,请点每帖右上角的“举报”按钮!

 

杨剑超


普通会员
资 料:

注册日期: Jan 2015
帖子: 111 
精华: 1
现金: 14 Kx
致谢数: 0
获感谢文章数:2
获会员感谢数:10

15  2015-05-14, 17:18:45 

引用:
最初由 chmlqw发布 

貌似IDA6.6 自动导入了jni.h这个文件了

这个我不知道,反正我的IDA没有看不到相关的数据结构

 

[培训]15PB软件安全培训,看雪会员有优惠!

 

 
第 1 页,共 2 页 1 2 >
添加到书签
  •  Digg
  •  del.icio.us
  •  StumbleUpon
  •  Google
  •  百度搜藏
  •  QQ 书签
  •  雅虎收藏
« 上一主题 | 下一主题 »
发帖规则
不可以发表主题
不可以回复帖子
不可以上传附件
不可以编辑自己的帖子

论坛论坛启用 vB 代码
论坛启用 表情图标
论坛启用 [IMG] 代码

论坛规则

  • 用户控制面板
  • 悄悄话
  • 收藏夹
  • 会员在线状态
  • 搜索论坛
  • 论坛首页
  • 初学者园地

  • 『求助问答』
  • 『经典问答』
  • 『资料导航』
  • Windows
  • 『软件调试逆向』
  • 『编程技术』
  • 『C32Asm』
  • 『MDebug』
  • 『安全工具开发』
  • 『加壳与脱壳』
  • 『CrackMe&ReverseMe』
  • 移动平台
  • 『Android 安全』
  • 『Android 开发』
  • 『iOS安全』
  • 『Windows Phone安全』
  • 信息安全
  • 『密码学』
  • 学术会议版
  • 『WEB安全』
  • 『漏洞分析』
  • 『云计算安全』
  • 『外文翻译』
  • 『资源下载』
  • 职场风云
  • 『招聘专区』
  • 『职业生涯』
  • 『15PB培训』
  • 『麦洛克菲培训』
  • 论坛生活
  • 『茶余饭后』
  • 『安全资讯』
  • 『论坛活动』
  • 6)PEDIY Crackme竞赛2009
  • 7)看雪十周年专版
  • 8)腾讯公司2010软件安全竞赛
  • 9)2011 Exploit Me竞赛
  • 『图书项目版』
  • 《加密与解密(第三版)》
  • 《C++反汇编与逆向分析技术揭秘》
  • 《Android软件安全与逆向分析》
  • 站务管理
  • 『论坛版务』
相似的主题
主题 主题作者 论坛 回复 最后发表
如果没有遇见“你” lijingli 7)看雪十周年专版 26 2014-06-06 03:35:10
调试逆向 【求助】【求助】调试中 遇见一个函数zwqueryobject fwoi 『软件调试逆向』 19 2008-11-07 09:27:13
【求助】脱壳中遇见的问题 xinghong 『求助问答』 1 2008-09-08 11:16:58
【原创破解驱动PC/SC遇见麻烦!! www 『求助问答』 0 2008-07-27 11:52:58
【求助】脱ASPack 2.12 -> Alexey Solodovnikov遇见的问题 糖醋鱼 『求助问答』 3 2008-01-31 12:14:44
所有时间均为北京时间, 现在的时间是 16:30:10.
  • -- VBB3
  • -- Wap
  • -- 大字体
  • -- English
  • -- 简体中文
  • -- 繁體中文
联系我们 - 看雪学院 - 文字模式 - 返回顶端
  ©2000-2016 看雪学院(PEdiy.com) |关于我们 | 京ICP备10040895号-17 | 知道创宇提供带宽资源 | 微信公众帐号:ikanxue   手机客户端: 

http://bbs.pediy.com/showthread.php?p=1365122相关推荐

  1. [转自“看雪论坛”]RtlAdjustPrivliege (http://bbs.pediy.com/showthread.php?t=76552)

    前言: 今天逆向一个非常实用的函数RtlAdjustPrivliege 这个函数封装在NtDll.dll中(在所有DLL加载之前加载),被微软严格保密,就是说你在MSDN上查不到关于他的任何信息. 先 ...

  2. android逆向快手,[原创] 快手签名-Android安全-看雪论坛-安全社区|安全招聘|bbs.pediy.com...

    整理了下,发现还有个和达达类似套路的,一起看看吧. 抓包 发送短信验证码POST /rest/n/user/requestMobileCode?app=0&lon=146.3516&d ...

  3. 火绒软件测试初学者,火绒初步评测-软件逆向-看雪论坛-安全社区|安全招聘|bbs.pediy.com...

    求大神们轻喷-- 注:本文测试主要依据3.x版本的病毒库,但是4.x环境依然有效 0x0 调试了好几个晚上,在茫茫汇编代码里,在无穷无尽的各种结构体里,太容易绕晕了,一个结构体套一个结构体,一个指针一 ...

  4. android安全分析师,乐固分析-Android安全-看雪论坛-安全社区|安全招聘|bbs.pediy.com...

    简介: 调试手机是Android 6.0的32位的手机.样本是自己写的一个demo小程序.加固时间为今年的12月中旬左右. Java层分析 壳的入口是MyWrapperProxyApplication ...

  5. C语言写花指令,[原创]写花指令-加壳脱壳-看雪论坛-安全社区|安全招聘|bbs.pediy.com...

    [原创]写花指令 2013-8-16 15:41 9889 [原创]写花指令 2013-8-16 15:41 9889 花指令,就是一串用来迷惑反编译器的汇编指令,它是利用编译器线性扫描算法的缺陷来达 ...

  6. 174.127.195.210/bbs/index.php?,[漏洞exploit工具-mona系列4] mona实战系列

    PS:本帖只发布些已有的mona实战的帖子,大部分来自互联网搜索结果,这里只给出链接. 来自corelan团段的 稳定通用的ROP链库,过DEP的同学可以看看 https://www.corelan. ...

  7. [转载]MaxtoCode对.Net程序加密的原理及解密探讨三(实例解密)

    标 题: [原创]MaxtoCode对.Net程序加密的原理及解密探讨三(实例解密) 作 者: rick 时 间: 2006-09-29,23:16:28 链 接: http://bbs.pediy. ...

  8. arm汇编学习(二)

    一.STMFD SP!,{R4-R7,R11,LR} 表示依次把R4-R7,R11,LR放入SP中,LR在高位 参考: http://blog.chinaunix.net/uid-26435987-i ...

  9. java代码(dex)注入

    首先简单介绍一下进程注入的概念: 进程注入就是将一段代码拷贝到目标进程,然后让目标进程执行这段代码的技术.由于这样的代码构造起来比较复杂,所以实际情况下,只将很少的代码注入到目标进程,而将真正做事的代 ...

最新文章

  1. linux 添加动态链接库路径
  2. 使用eclipse svn塔建(配置)时的一点点心得
  3. python柱状图挨在一起_echarts多个柱状图展示问题(bar都挤到一起了)
  4. 在过程中要正式批准可交付成果_干货!软考高项项目管理知识体系5大过程组47个过程...
  5. 等概率随机函数的实现(对立事件的产生)
  6. CMD中文显示为乱码
  7. 萤火虫算法matlab实现,智能算法萤火虫算法Matlab源代码
  8. 压力换算公斤单位换算_压力与重量换算(公斤换算压力)
  9. Mac修改hosts方法
  10. Typora免费版(Typora最后一个版本下载)
  11. 4个方法,教你1分钟查询你的手机注册了多少软件和网站
  12. C语言用随机函数做猜拳游戏,c语言猜拳游戏
  13. HW--DSF服务配置文件
  14. logback使用配置详解
  15. uva 12325 宝箱
  16. 张三的奶牛踩花:C++用贪心法解POJ3262_Protecting the Flowers问题
  17. 用DIV+CSS技术设计的餐饮美食网页与实现制作(web前端网页制作课作业)HTML+CSS+JavaScript美食汇响应式美食菜谱网站模板
  18. error: src refspec XXX matches more than one
  19. 基本共射放大电路的动态分析(低频、Ri、Ro大小对电路影响的分析)
  20. 鼠友题库每日百题(十)

热门文章

  1. bug bounty - 绕过限制劫持Skype账号
  2. 网站被降权了怎么办?
  3. video标签(获取视频时间总长度,视频当前时间,播放暂停方法,视频封面,)
  4. 代号夏娃在电脑上怎么玩 代号夏娃PC版玩法教程
  5. 什么时候不要采用微服务架构
  6. Python——绑定与方法调用
  7. flex effect
  8. 计算机音乐谱东演员,抖音计算机乐谱有哪些 抖音计算机乐谱分享
  9. 初二计算机听课笔记,初二物理上听课记录20篇
  10. 设置windows桌面的窗口为保护色或豆绿色