Category: Reverse Engineering

浅析Seafile网盘apk的端对端加密方式

写在开篇 使用了架设在自己服务器上的Seafile一段时间,本菜对于其宣传的“端对端加密,数据在客户端解密”这个特性产生了好奇。很想了解一下网络传输、加密的过程是如何运作的。不多说,我们马上配置好Android上的抓包环境,用fiddler看看网络传输的内容吧[note]https://blog.csdn.net/ASSYIRAN/article/details/82994042[/note]。   环境配置 系统 : Windows 7、nexus 5 程序 : Seafile 2.2 for Android 程序下载地址 : https://www.dreamcracker.online/d/93572bfed8124e798eab/files/?p=/Crack_Me/com.seafile.seadroid2_83.apk 要求 : 分析逻辑 使用工具 : fiddler、apktool、Android Killer、Android Studio、 smalidea插件 抓包分析 确认端对端加密设置启用后,打开设置好的加密资料库secret,输入密码: 此时捕获到了这样几个包(关键位置已打马赛克): 这里post密码,服务器认可。 返回了资料库的一些信息,比较值得关注的有加密类型、magic、random_key。 接下来请求根目录内容,Response以json形式展现了资料库根目录内容。   此时,我们请求一个文件,看看传输来的数据如何。 获得服务器生成的下载的链接,然后得到一段密文。这里文件的大小是120字节,而传输过来的文件大小是128字节。   再随机拍张照片上传,此时抓到的文件数据和本地的很不相同   综上所述,我们可以做出如下猜测。 1.服务器对于加密资料库提供了端对端加密的方式,即文件在本地解密,即使有人攻击了传输链条中任意一环,也无法直接获得明文消息。 2.加密资料库以“端加密方式”开放时,会生成随机消息用于加密。 3.加密方式是通用的公开算法,且有可能是cbc模式。   提出假设 我们使用最新的apktool做为反编译工具,发现提示反编译成功。那么,直接设置我们的apktool的路径作为Android Killer的默认反编译器。我们直接全局搜索“加密”: <string name=”enc_on”>数据在本地解密</string> <string name=”enc_title”>加密资料库解密方式</string> <string name=”encrypt”>加密</string> 接着全局搜索enc_title,发现出现很多xml文件,再仔细看看,其实更多是重复的多语种的string资源文件。经过筛选,发现\res\xml\settings.xml的这一行很可疑: <com.seafile.seadroid2.ui.SwitchPreferenceCompat […]

Duelist’s Crackme #3 算法分析

系统 : Windows xp 程序 :skilLa’s_keyGenMe#3 程序下载地址 : https://www.dreamcracker.online/d/93572bfed8124e798eab/files/?p=/Crack_Me/due-cm3.rar 要求 : 写出注册机 使用工具 :OD,IDA,eXeScope 可在看雪论坛中查找关于此程序的讨论:传送门   将程序投入OD、按下F9运行,发现这个CM很奇怪,有2*9个checkbox,再用字符串查找发现如下字符: 中文搜索引擎, 条目 3 地址=0040117B 反汇编=push due-cm3.00402017 文本字符串=Congratulations! Please send a screenshot of your solution to duelist@beer.com! 定位到关键代码,然后用IDA生成伪代码: INT_PTR __stdcall DialogFunc(HWND hDlg, UINT a2, WPARAM a3, LPARAM a4) { INT_PTR result; // eax@4 int v5; // esi@7 int v6; […]

skilLa’s_keyGenMe#3 算法分析

系统 : Windows xp 程序 :skilLa’s_keyGenMe#3 程序下载地址 : https://www.dreamcracker.online/d/93572bfed8124e798eab/files/?p=/Crack_Me/s_keygenme%233.rar 要求 : 写出注册机 使用工具 :OD,IDA 可在看雪论坛中查找关于此程序的讨论:传送门   将程序投入OD、按下F9运行,发现是一个标准的CM,通过输入用户名和密码判断是否有效。在用字符串查找发现如下字符: 中文搜索引擎, 条目 6 地址=0040115C 反汇编=push skilLa’s.0040302A 文本字符串=Goodboy, now write a keygen 查找到引用此字符串的相关代码段,经过修饰的伪代码如下: INT_PTR __thiscall DialogFunc(char *this, HWND hDlg, UINT a3, WPARAM a4, LPARAM a5) { CHAR v5; // t1@6 int (*v6)(); // eax@12 int v7; // ebx@13 if […]

CuTeEvil Crackme 2 算法分析

系统 : Windows xp 程序 :CuTeEvil Crackme 2 程序下载地址 : https://www.dreamcracker.online/d/93572bfed8124e798eab/files/?p=/Crack_Me/crckme2.rar 要求 : 写出注册机 使用工具 :OD,IDA 可在看雪论坛中查找关于此程序的讨论:传送门   将程序载入IDA,发现左边函数列表中有start,双击后F5查看: void __noreturn start() { WPARAM v0; // eax@2 hInstance = GetModuleHandleA(0); GetCommandLineA(); InitCommonControls(); v0 = sub_401031(hInstance, 0, dword_403228, 10); ExitProcess(v0); } 查看 sub_401031函数 WPARAM __stdcall sub_401031(HINSTANCE a1, int a2, int a3, int a4) { struct tagMSG […]

分析一个语义上有明显错误的cm

系统 : Windows xp 程序 : CrackMe V3 by Bxm.exe 程序下载地址 : https://www.dreamcracker.online/d/93572bfed8124e798eab/files/?p=/Crack_Me/crackme%20v3%20by%20bxm.rar 要求 : 分析逻辑 使用工具 :OD,载入map文件的od插件 可在看雪论坛中查找关于此程序的讨论:传送门   该cm的反调试机制和bxm的第二个cm的一模一样,在之前的post里已经分析过,只要先手动启动exe然后附加就可以轻松绕过。   打开exe之后是很典型的用户名-密码-输入窗口,我们需要找到其判断逻辑的代码所在,可是和第二版cm不同的是,这次的检查完调试器后的代码段并非在用户领空,查看其调用栈也没发现可疑的函数。   于是我随时输入了几个常用组合试了试,没想到一下子就提示成功信息了。我用的组合是”pediy”-“11″。   一般来说出现这样的情况的概率比较小,这里应该是程序逻辑上有些漏洞。先不管这么多,既然弹出了消息框,我们就可以找出相关的api函数下断点: CWnd::MessageBoxA。   这里,我们就按图索骥的找到了程序的关键代码所在。这里,可以将ida中识别出的数据导出成map,然后由od插件 LoadMapEx导入od,多按几下ctrl+a强制重新分析代码即可显示mfc的函数名了。 放出一段经由ida转换修改过得伪c代码: int __thiscall sub_401EA0(CWnd *this) { const char *v1; // eax@1 size_t err_len_2; // esi@19 const char *password; // eax@19 size_t v4; // eax@21 […]

一个简单的反调试cm

系统 : Windows xp 程序 : CrackMe V2 by Bxm 程序下载地址 : https://www.dreamcracker.online/d/93572bfed8124e798eab/files/?p=/Crack_Me/crackme_v2_by_bxm.rar 要求 : 写出注册机 使用工具 :OD 可在看雪论坛中查找关于此程序的讨论:传送门 首先使用OD载入程序并且按下F9运行,程序主界面主要由两个输入框组成,一个是用户名,另一个是key。我们在用户名输入框中随意输入数字,例如“1111111”。单击“注册”按钮,此时程序会退出。   按下Alt + K查看退出时的堆栈情况: 调用堆栈: 主线程 地址 堆栈 函数过程 / 参数 调用来自 结构 0012F464 7C92DE5C 包含ntdll.KiFastSystemCallRet ntdll.7C92DE5A 0012F560 0012F468 7C81CAB6 包含ntdll.7C92DE5C kernel32.7C81CAB4 0012F560 0012F564 7C81CB0E ? kernel32.7C81CA54 kernel32.7C81CB09 0012F560 0012F578 00402737 ? kernel32.ExitProcess CrackMe_.00402731 0012F574 […]

跟踪逆向之bxm

看雪用户bxm,注册时间2005-10-30,主题数:41 ,精华数:29。本文是为了方便跟踪,分析其精华文章而专门建立的索引。   在最新版看雪论坛,其精华文章被划分成了四页,此处我按照文章顺序也划分了四页[note]https://www.dreamcracker.online/d/206b1486a93c4145bdef/files/?p=/Tool/Script/spider/get_article_list_kanxue_only.py.md[/note]。每页的标题若是标注有下划线可以链接至其他页面的,证明此文章已经被分析过。   page one [原创]bxm第8个CrackMe,高手飘过 #关注文章 [原创]forgot’s CRACKME 1994算法分析 # 易语言,暂不分析 [原创]**处理系统5.7注册算法分析+注册机源代码 # 未找到下载地址 [原创]bxm的第5个CrackMe #关注文章 [原创]CrackMe.bxm.vc6.04 #关注文章 [原创]**Flash播放器V7.63的算法分析+注册机源码(简单) # 未找到下载地址 [原创]Am0r’s CrackMe的破解(VB) # 特殊语言,暂时不考虑 [原创]Bxm的第3个CrackMe # 进度 100% 。逻辑有误 #关注文章 [原创]Bxm的第二个CrackMe(算法简单) # 进度 100% 。 简单算法 #关注文章 [原创]webmasta’s算法分析(VB简单) # 特殊语言,暂时不考虑 page two (Done) [原创]skilLa’s keyGenMe#3算法分析(检测断点)# 进度 100% 。 简单算法 [原创]Serialcracker’s的算法分析(VB) # […]

Windows逆向 : 从配置初始环境到网络流量分析

此篇文章简单讨论Windows下逆向工程常用的初始环境配置,再提供一个网络流量分析的脚本供大家参考。   环境设置 Windows逆向一般都在虚拟机下操作,此处我们以cuckoo沙箱[note]http://dreamcracker.today/2018/03/13/%e5%9c%a8ubunut16-04%e4%b8%8a%e5%ae%89%e8%a3%85cuckoo%e7%9a%84%e4%b8%80%e7%82%b9%e5%bf%83%e5%be%97/[/note]和windows experience系统为例,架设一个最为基础的初始环境。   在xp系统安装完成之后,可以配置一些基础的辅助分析工具,例如wireshark,火绒剑[note]https://www.dreamcracker.online/d/93572bfed8124e798eab/?p=/Tools/windows%E5%B7%A5%E5%85%B7/%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B/%E7%9B%91%E8%A7%86%E5%B7%A5%E5%85%B7&mode=list[/note],以及python所需求的依赖库等等。   在cuckoo环境准备好之后,安装想要分析的软件。安装软件为了减少变量,可以采取禁止网络流量 或者在安装程序运行之后,禁止新进程创建,禁止写入注册表等等行为[note]https://www.dreamcracker.online/d/93572bfed8124e798eab/?p=/Tools/windows%E5%B7%A5%E5%85%B7/%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B/%E9%A9%B1%E5%8A%A8&mode=list[/note] 这样在运行安装程序的时候,就可以令安装程序专注于自己的工作了,在安装程序结束之后,可以为当前状态保存一个快照,例如”snapshot”。   触发行为 在”snapshot”快照的基础上,我们可以试出自己想要的功能以及其对应的exe路径以及参数。就以更新行为举例,打开火绒杀毒软件,运行火绒剑,可以发现进程启动时相关的信息。 利用spy++[note]https://www.dreamcracker.online/d/93572bfed8124e798eab/files/?p=/Tools/windows%E5%B7%A5%E5%85%B7/%E7%AA%97%E5%8F%A3%E6%8E%A7%E4%BB%B6%E7%B3%BB%E7%BB%9F%E4%BF%A1%E6%81%AF%E6%9F%A5%E7%9C%8B.exe[/note]搜集我们需要的子窗口控件的信息,打开spy++,拖动左上角的靶子到你想要了解的控件上,然后松开就可以看见控件相关的情报了。 收集了足够多的信息,此时可以利用python脚本去启动相对应的程序,触发我们想要的行为。[note]https://www.dreamcracker.online/d/206b1486a93c4145bdef/?p=/Tool/Script/auto_run[/note]   自动化操作的过程中,有几点需要提一下 并非所有观察到的按钮都是子窗口/控件,是无法用spy++查看到信息的,这时可以用键盘操作代替PostMessageAPI函数。 发送WINOWS消息之前并非只能无目的的等待,也可以编码实现令程序发现控件存在后再退出循环,发送特定的消息。 hwnd = 0 while hwnd == 0: hwnd = win32gui.FindWindowEx(0,0,0,u”QQ影音在线更新”) hwnd = win32gui.FindWindowEx(hwnd,0,0,u”立即更新”) time.sleep( 10 ) win32api.PostMessage(hwnd, win32con.WM_LBUTTONDOWN, win32con.BM_CLICK, 0) win32api.PostMessage(hwnd, win32con.WM_LBUTTONUP, win32con.BM_CLICK, 0)   在cuckoo沙箱中,此处上传python脚本后就可以安心等待分析的结果。但如果是较为复杂的程序,还需人工手动实现逆向分析。   自动化筛选 对于抓包、api分析的结果,可以根据需要编写脚本提炼出更有价值的结果,此处放出一个网络流量分析脚本抛砖引玉。

之前做过的一些CM

文章存放在之前的博客园博客里,如果网页失效了,可以到我的私有云下载镜像。

安全方面学习路线图