逆向-360逆向writeup
Crackme逆向分析
逆向第一题,很简单,分分钟能搞定。题目大致是说找一个key,提示success就行。
Peid查一下没有任何壳,是vc写的程序,里面没有知名的算法。开始分析
错误的时候是这个样子
首先这一点就能给我们以下几点提示:
1此程序是vc写的,那么得到用户输入肯定是用到getdigitemtext系列函数,通过对函数下断即可以得到用户的输入
2.比较字符串,提示错误的字符串为done,查找字符串
3.失败与成功都会弹出对话框,那么同理也可也对messagebox系列函数下断
4.……其他 的方法暂且不说
直接getdigitemtext下断发现断不下,嗯嗯,后来查看程序的时候发现这个程序并不是调用了这个函数,而是他的同类型函数 GetWindowTextA,下断点之后,截断了用户的输入来到这个函数开头:
0042BAA3 |. 8B4D 10 mov ecx,[arg.3]
0042BAA6 |. 6AFF push -0x1
0042BAA8 |. E8846BFFFF call CrackMe.00422631
0042BAAD |. EB0B jmp XCrackMe.0042BABA
0042BAAF |> 8B45 10 mov eax,[arg.3]
0042BAB2 |. FF30 push dword ptrds:[eax]
0042BAB4 |. 56 push esi
0042BAB5 |. E8E4EBFFFF call CrackMe.0042A69E
0042BABA |> 5F pop edi
0042BABB |. 5E pop esi
0042BABC |. 5D pop ebp
0042BABD \. C20C00 retn 0xC
,嗯嗯,直接单步掉,过几个跳转之后来到算法的地方:
00401420 . 6AFF push -0x1
00401422 . 68D0904300 push CrackMe.004390D0 ; SE 处理程序安装
00401427 . 64:A1 0000000>mov eax,dword ptr fs:[0] ; 关键代码
0040142D . 50 push eax
0040142E . 64:8925 00000>mov dword ptr fs:[0],esp
00401435 . 83EC 0C sub esp,0xC ; 保护现场
00401438 . 56 push esi
00401439 . 57 push edi
0040143A . 8BF9 mov edi,ecx
0040143C . 6A01 push 0x1
0040143E . E8FD3E0200 call CrackMe.00425340 ; 读字符串给edx
00401443 . 6A00 push 0x0
00401445 . 8D4F 5C lea ecx,dword ptrds:[edi+0x5C]
00401448 . E895110200 call CrackMe.004225E2 ; 读输入字符串给eax
0040144D . 51 push ecx
0040144E . 8BF0 mov esi,eax
00401450 . 8BCC mov ecx,esp
00401452 . 896424 14 mov dword ptrss:[esp+0x14],esp
00401456 . 68CCA04400 push CrackMe.0044A0CC ; strawberry
0040145B . E8C00D0200 call CrackMe.00422220
00401460 . E81BFFFFFF call CrackMe.00401380 ; 读入一系列key做运算
00401465 . 83C4 04 add esp,0x4
00401468 . 8D4C24 0C lea ecx,dword ptrss:[esp+0xC]
0040146C . 50 push eax
0040146D . E8AE0D0200 call CrackMe.00422220
00401472 . 8D4C24 0C lea ecx,dword ptrss:[esp+0xC]
00401476 . C74424 1C 000>mov dword ptr ss:[esp+0x1C],0x0
0040147E . E8CF120200 call CrackMe.00422752
00401483 . 6A00 push 0x0
00401485 . 8D4C24 10 lea ecx,dword ptrss:[esp+0x10]
00401489 . E854110200 call CrackMe.004225E2
0040148E . 50 push eax
0040148F . 8D4C24 0C lea ecx,dword ptrss:[esp+0xC]
00401493 . C640 09 4B mov byte ptrds:[eax+0x9],0x4B
00401497 . E8840D0200 call CrackMe.00422220
0040149C . 8D4C24 08 lea ecx,dword ptrss:[esp+0x8]
004014A0 . C64424 1C 01 mov byte ptrss:[esp+0x1C],0x1
004014A5 . E8A8120200 call CrackMe.00422752
004014AA . 6A00 push 0x0
004014AC . 8D4C24 0C lea ecx,dword ptrss:[esp+0xC]
004014B0 . E82D110200 call CrackMe.004225E2
004014B5 > 8A10 mov dl,byte ptr ds:[eax] ; 判断成功的代码
004014B7 . 8ACA mov cl,dl ; 查看比较就知道是上面出现过的key
004014B9 . 3A16 cmp dl,byte ptr ds:[esi]
004014BB . 75 1C jnz XCrackMe.004014D9
004014BD . 84C9 test cl,cl
004014BF . 74 14 je XCrackMe.004014D5
004014C1 . 8A50 01 mov dl,byte ptr ds:[eax+0x1]
004014C4 . 8ACA mov cl,dl
004014C6 . 3A56 01 cmp dl,byte ptr ds:[esi+0x1]
004014C9 . 75 0E jnz XCrackMe.004014D9
004014CB . 83C0 02 add eax,0x2
004014CE . 83C6 02 add esi,0x2
004014D1 . 84C9 test cl,cl
004014D3 .^ 75 E0 jnz XCrackMe.004014B5
004014D5 > 33C0 xor eax,eax
004014D7 . EB 05 jmp XCrackMe.004014DE
004014D9 > 1BC0 sbb eax,eax
004014DB . 83D8 FF sbb eax,-0x1
004014DE > 85C0 test eax,eax
004014E0 . 6A 00 push 0x0
004014E2 . 6A 00 push 0x0
004014E4 . 75 07 jnz XCrackMe.004014ED
004014E6 . 68 E0A04400 push CrackMe.0044A0E0 ; success
004014EB . EB 05 jmp XCrackMe.004014F2 ; 破解完成
004014ED > 68 D8A04400 push CrackMe.0044A0D8 ; Done
破解过程直接看注释吧,比较累,所以写的比较简单,没有仔细分析算法。
嗯嗯,破到这个地方,看看堆栈,发现暂停堆栈分析也能秒破这个程序
0018F830 00422761 CrackMe.00422761
0018F834 01D3D8E8 ASCII "K$q*a_+@Xt"
0018F838 01D3D848 ASCII "123456"
0018F83C 00000000
0018F840 0018FE6C
0018F844 0043B890 CrackMe.0043B890
0018F848 01D3D8E8 ASCII "K$q*a_+@Xt"
0018F84C 01D3D898 ASCII "tX@+_a*q$K"
分析结束,大牛勿喷!
Reverseme逆向分析
题目只记得大致意思,是说有一个文件.db被这个程序加密了,要想得到key就要么逆向这个加密程序的算法,然后自己写解密程序解密,要么用这个软件修复里面的bug运行两次就可以得到key(坑爹的提示,反正我没有运行两次就整出来了)
同样peid查出无壳,没有加过壳,运行这个程序:
嗯嗯,根据提示,肯定是里面某个函数传参出了问题。
OD载入,刚入口就有这个messagebox,一开始参数出现了错误。
0040103D>/$ 68 10304000 push ReverseM.00403010
00401042 6A 01 push 0x1
00401044 |. E873010000 call ReverseM.004011BC
00401049 |. 83F8 01 cmp eax,0x1
0040104C |. 7414 je XReverseM.00401062
0040104E |. 6A00 push 0x0 ; /Style =MB_OK|MB_APPLMODAL
00401050 |. 681D344000 push ReverseM.0040341D ; |Title = "提示"
00401055 |. 6810344000 push ReverseM.00403410 ; |Text = "输入参数错误"
0040105A |. 6A00 push 0x0 ; |hOwner =NULL
0040105C |. E847010000 call<jmp.&user32.MessageBoxA> ; \MessageBoxA
跟进Reverse,.004011BC,发现这个函数实际上是在读这个软件的路径,但是没有成功。(算法分析过,结果最近手残OD清空过一次,算法没了,有兴趣的可以自己下去分析,)用IDA分析的算法差不多是下面这个样子:
将读出的路径写到00403010去,这里管不管都行,,因为程序的大致思路是在下面的readfile读出来,然后在write回去。加上pass.db把参数push0x1改为 push 0x0(这个时候会读reverseme.exe)。
单步到这个地方:
00401089 |. 6A00 push 0x0 ;/pFileSizeHigh = NULL
0040108B |. FF35 00304000 push dword ptr ds:[0x403000] ; |hFile = 0000005C
00401091 |. E8EE000000 call<jmp.&kernel32.GetFileSize> ; \GetFileSize
00401096 |. A304304000 mov dword ptrds:[0x403004],eax
0040109B |. 6A04 push 0x4 ; /Protect = PAGE_READWRITE
0040109D |. 6800100000 push 0x1000 ; |AllocationType= MEM_COMMIT
004010A2 FF35 FA2F4000 push dword ptrds:[0x402FFA]
004010A8 |. 6A00 push 0x0 ; |Address = NULL
004010AA |. E8E1000000 call<jmp.&kernel32.VirtualAlloc> ; \VirtualAlloc
发现virtualalloc在分配内存的时候分配了0字节(关于这个api不懂的可以百度或者msdn),往上面瞅瞅,刚好有GetFileSize,将参数传递给他,然后绕过这个bug
然后哈,文件就可以正常的读进来了
(这个地方其实是已经得到的正确的key,貌似之前读进来的是一堆asc值好像,记不太清了)同理,绕过下面的bug,然后key就是刚刚那个了。
关于程序入口处第一个messagebox,是要修改跳转的,如果不修改跳转,而把参数0x1改为0x0,发现读进来的是
然后messagebox是没有异常存在了,但是下面那个分配内存的地方还是会出错,然后修改一下,在createfile和readfile之后文件夹中多了这么一个文件
Winhex分析之后实际上就是这个.exe的代码
熟悉的PE结构,然后下面写之后变成这样
哈,分析上面的之后加密算法就可以找出来了。然后找出来之后同样可以对.db解密。
至此,分析完毕,大牛勿喷!
inject
第三个程序:inject:
依然没有壳,想到病毒,第一反应是PE结构,然后也神马都不懂的就winhex了一下,结果啥子都不晓得。管他,运行一下,尼玛啊,啥都没有。看看资源管理器,并没有inject的进程。估计是被玩坏了的样子。
OD载入一下,没的啥思路,看了看字符串,嗯?
提示啊,来到这个函数地方
开始没搞懂这个是神马杰宝,代码并没有分析完全,然后分析了一下代码弄成这个样子:
0043E005 . 6A00 push 0x0
0043E007 . 685BE04300 push Inject.0043E05B ; Key?NO!
0043E00C . 682BE04300 push Inject.0043E02B ; A02B8DE7F2BCD4ED
0043E011 . 6A 00 push 0x0
0043E013 . E8F909A775 call kernel32.75EAEA11
0043E018 . 6A00 push 0x0
0043E01A E8 db E8
0043E01B 47 db 47 ; CHAR 'G'
0043E01C 62 db 62 ; CHAR 'b'
0043E01D 08 db 08
0043E01E 75 db 75
下面的OD还是没法分析,不过同样是call kernel32.75EAEA11(机器码一样)
在call的时候又一个A02B……的字符串,不过不是key,然后程序因为被病毒感染,所以IAT应该受到破坏了,一运行程序就自己蹦掉
了。
然后想想看还有木有其他办法:
程序从开头直接跳到假码,然后就直接崩了,所以直接把jmp给nop掉
发现了一些很有特征的函数,GetVersion,GetCommandLine……,擦,c程序的入口啊,尼玛跑下来,估计然后查一下字符串,发现了另外一个
坑爹啊,这货就是!!!,但是是在sendmessagebox后面,估计会弹出来个什么框框吧。
最坑爹的事情来了,尼玛nop掉之后我还在程序里面想怎么让他弹出个框,想了好久,每次还是会让这个程序崩掉,后来觉得每次改一遍nop麻烦,就直接先把nop保存下来,然后无聊点了一下保存的文件,靠,直接弹框啊
没道理啊,嗯,要去吃饭了,没怎么弄明白为什么保存之后程序可以正常运行了
,看这个样子估计是程序里面有反调试吧,在OD环境下不会正常运行。
分析完毕,大牛勿喷!!!
第4题题目忘记了
很遗憾当时第4题因为在web上被卡住了未能做出来。第4道题转自我的队友:
下午做了一下,这一题共有两个文件
那个exe打开后如下图
看到那个图片了么,还有一串像key的数字,我猜那串数字一定不是key,而且也不是隐写的题,要不然怎么放逆向这边了呢,所以咱还是要分析这个程序,经过几番尝试,知道源文件编辑框中输入上边这张图,数据文件是你要加入的数据,用txt保存,目的文件是将以上两个文件组合成第三个文件,所以这个目的文件也要是bmp文件。
点按钮“开始隐藏”,会弹出“隐藏信息完毕!”的对话框,可这怎么得到key呢,我们只有从图片中提取key。
用IDA看看,
发现不但有“隐藏信息完毕!”,还有“提取信息完毕!”,找到引用该字符串的代码,在401DD2处,向上翻,
有两个CreateFile,然后又两个ReadFile,又有一个WriteFile,发现CreateFile中的Filename是空的,应该就是那两个特别小的编辑框了,用PE-Explorer将编辑框放大。
就可以输入文件名了,可是怎么到达这处代码呢,看“开始隐藏”,
这部分功能代码与提取信息的那部分代码相似。
具体就不分析了,因为无关紧要,直接改代码,使它跳转到提取信息的代码处
保存运行:
这时候2.txt中就有key了,“B0ACD1BDA3FD1CD6”。
逆向-360逆向writeup相关推荐
- 【Android 逆向】逆向修改游戏应用 ( 分析应用结构 | 定位动态库位置 | 定位动态库中的修改点 | 修改动态库 | 重打包 )
文章目录 一.应用结构分析 二.定位动态库位置 三.定位动态库中的修改点 四.修改动态库 五.重打包 一.应用结构分析 分析上一篇博客 [Android 逆向]逆向修改游戏应用 ( APK 解析工具 ...
- 游戏逆向-CSGO逆向透视自瞄分析技巧
游戏逆向–CSGO逆向分析 分享一下个人所学,说实话自己也不是学的很透,首先我推荐使用Ce结合Old,因为可以看清汇编源码的同时通过ce查找突破口. 首先说一下,在弄清楚所谓的透视自瞄之前先弄清楚什么 ...
- 2021年巫妖易语言-js逆向-安卓逆向hook教程
链接:https://pan.baidu.com/s/1kdiAfXVNHgKT6BFdqzCYsw 提取码:jvw8 2021年最新巫妖易语言-js逆向-安卓逆向hook教程-10.12上课录像(这 ...
- 巫妖易语言+js逆向+安卓逆向
教程介绍 2021年最新巫妖易语言+js逆向+安卓逆向hook培训教程(修复画质声音不同步不加密版),课程主要讲解的内容是易语言+js逆向+安卓逆向hook,课程是2020年11月底刚培训结束的,也是 ...
- Android逆向writeup,【技术分享】春秋杯逆向第一题writeup
最近被春秋杯逆向题坑了两天,记录一下解题过程. 程序一运行,就弹个控制台窗口,啥也没有,拖进IDA看了才知道,是在等待用户输入验证的key: 程序的主框架很简单,就是一运行后初始化一些数据,等待用户输 ...
- android 360加固 反编译,[原创]逆向360加固等dex被隐藏的APK
如果遇到apk中的lib文件夹中是这样的 基本没有dex文件可以反编译,这中的dex文件一般都是加密混淆压缩后放在so中啦. 但是软件要想运行就需要解出dex字节码然后加载到手机内存中,这样就可以在软 ...
- 爬虫逆向 js逆向常用工具简单介绍
古语有云:工欲善其事,必先利其器. 作为逆向的开始,这个自然是无法避免的,毕竟js逆向的环境是浏览器,而浏览器自然为开发做了很多工具,方便再开发的时候检测开发过程中是否有问题,就像开发过程中debug ...
- 【Android 逆向】逆向修改游戏应用 ( APK 解析工具 | 解包 -> 分析 -> 重打包 -> 签名 流程 )
文章目录 一.APK 解析工具 二.解包 -> 分析 -> 重打包 -> 签名 流程 一.APK 解析工具 使用 [Android 逆向]使用 Python 编写 APK 批处理分析 ...
- 安卓逆向_1 --- 逆向环境配置、APK 文件结构、APK 打包流程
哔哩哔哩:https://www.bilibili.com/video/BV1UE411A7rW?p=1 Android 逆向工程师系统培训‹第九期›( 课程目录 ):https://ke.yijin ...
最新文章
- 练习2:课工场响应式导航条_作业帮直播课APP下载最新版入口
- C语言文件最后一行重复储存,求大佬看看,我这个程序为什么保存进文件只有最后一行...
- html loading原理,加载HTML-Loading HTML
- MATLAB找不到遗传算法工具箱,用不了gatool命令的解决方案
- 数据中心加速,一文说清FPGA与GPU、ASIC目前的竞争格局
- cenotos 卸载mysql_CentOS 6.2编译安装Nginx1.0.12+MySQL5.5.21+PHP5.3.10 | 系统运维
- spark环境搭建(idea版本)
- 阿里云Https部署网站
- mysql主库从库在同一台服务器_MySQL数据库的主从配置(多主对一从)
- 地平线后端开发实习面经
- ZeroMQ使用教程
- 百度大脑FaceID人脸识别模型量化技术,确保算法精度无损加速一倍
- 以下关于python二维数据的描述中错误的是_关于二维数据CSV存储问题,以下选项中描述错误的是:...
- 指法练习软件需求说明书
- 双目结构光系统论文阅读总结
- html5怎么插入psv,请问psv要怎么才能连接电脑进行文件传输?
- excel将B列数据放在A列后面
- 论文投稿指南——中文核心期刊推荐(环境科学)
- 以下代码中的两个sizeof用法有问题吗?
- Android切面编程(AOP)详解
热门文章
- FFmpeg入门详解之11:H264BSAnalyzer简介
- python多元非线性回归_day-13 python库实现简单非线性回归应用
- leetcode(力扣) 718. 最长重复子数组 1143. 最长公共子序列 1035. 不相交的线 (动态规划)
- 简单的外汇市场赚钱方法
- 2012-2-15雨
- 蛇形走线用于什么方面,一文告诉你
- mysql只能存1000条数据_为什么我mysql的表添加了1000条记录之后就存不进去数据了,客户端也没报错...
- 如何去除 aspose.cells 水印
- 老年人计算机培训信息,老年人学习电脑基础知识
- html简单的时分秒计时器,时分秒自定义倒计时计时器