-
-
[原创]简单记录某邮箱app注册算法破解过程
-
发表于:
2016-4-24 14:02
5296
-
暂时不会写的太详细,就记录个过程。
以前稍微研究过windows平台的逆向,汇编什么的,但是没有深入。这次是第一次尝试移动平台,花了三天时间算是基本完成任务。对象是国内某著名邮箱app,不是大师,是邮箱。
第零阶段。
抓包,我用的mitmproxy,windows平台用fiddler。大概发现三四个主要的https请求。感兴趣的:URL,post基本是json格式数据,有什么env,sig,uid,password,confirmpassword。URL里的参数有env,t,一个随机的_。服务器返回的感兴趣的有envalue,code,msg等。
第一阶段。
哇,居然有dex2jar,jdgui这样的工具,直接到源码啊,移动平台是不是太简单了?然而看jdgui的源码后发现,一是代码混淆,二是字符串混淆,只能看到apk大概的代码结构,具体的逻辑代码是看不出来的。但是看看activity是不错的,能看到大概的ui逻辑。
第二阶段。
不行啊,字符串也是混淆的,不过混淆的很明显,获取明文时全部用的一个文件里的解密算法。把这个文件的smali代码抽取出来,编译成jar包,写个程序调用,替换掉jdgui里的加密的字符串,根本无需破解加解密算法。很好,能稍微看到一点逻辑了,字符串也是能提供一些代码逻辑信息的。根据第零阶段收集到的信息,搜索这些字符串,发现两三个重要的文件。所有的操作估计就在这几个文件中了。
第三阶段。破解sig。
前面提到有个sig,从内容形式,名字上看是hash。这一步耗时最久。前面post的数据多半都参与了运算,找到关键部分代码,看看字符串,大概知道了,但是还有两个没在post的数据里的,有什么cmd,client什么的,在URL里,看来服务器做了不少校验。其中有一个字符串,在jdgui里看到获取方式是从一个native函数里获取的,开始的时候想,也许就是个空字符串呢,不管他。仿着java源码写(我主要用py),不对劲,算出来hash不符合,于是想起前面那个字符串。猜测也许是个固定值,就不去调so了(所以到现在还没调过so呢),直接smali插桩,log一下那个字符串,看到了一串看起来像随机的,不过里边有个s&alt子字符串,估计就是用于hash的salt了。再用不同的设备和模拟器试一下,log出来是一样的,好,固定下来,写到程序里,hash正确了。
第四阶段。破解env。
还以为服务器不会检查呢,居然这个参数也是需要检查的。前面说服务器返回的有envalue,看名字和post过去的env有关系,直接搜env,找到两三处,有个函数很明显的是有复杂的计算,里边还有个“calc env failed",呵呵,估计就是这里了。仿照着写,用到了时间戳(也post到服务器了),服务器返回的envalue,好像就是这两个了。加入程序,试注册一个,code返回200,完工。把返回的code的可能值都看看,写进去基本差不多了。
该公司还有个某大师产品,代码看起来和某邮箱很有共通之处,不过mitmproxy没抓到http流量,wireshark能看到确实有https协议,感觉好像是用了http proxy中的 connect,还没研究出来。从代码看来里边是有看到user-agent,accept之类的,但是网络操作隐藏的比较深,只找到两个名字包含async的变量,但是跟过去定义的代码只有一些interface,abstract之类的,没看到具体的操作是怎么样的,正在研究。不过先得做毕设了,一时半会估计搞不出来,等有空了再详细说说。
ps 好久没上看雪了。大一大二搞了搞windows,Linux平台的底层,大三转web前端和后端开发了,大四发现各大公司,产品对移动端的产品青睐有加,各种优先,连qq挂机都是安卓协议的坑比pc少,唉,不搞移动端不行了,所以这次弄个app练个手,得罪之处还请原谅,如觉侵权请联系我删除。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课