• Stars
    star
    110
  • Rank 314,861 (Top 7 %)
  • Language
    C++
  • Created almost 9 years ago
  • Updated over 8 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

SNST Traning RE Project .华软网络安全小组逆向工程训练营,尝试以CTF 的形式来使大家可以动手训练快速提升自己的逆向工程水平.CTF 的训练程序又浅到深,没有使用太复杂的算法,在逆向的过程中遇到的难关都是在分析病毒和破解中遇到的实际情况,注重于实用.训练营还包含有源代码文件,训练程序和思路.希望可以帮助小伙伴们入门逆向工程这个神奇的世界..

#华软网络安全小组逆向工程训练营

###SNST Reverse Engineering Traning

各个训练程序解析


###1.RE-50 Writeup

把代码导入到IDA ,用Hex-ray 把Main 函数汇编转到伪C 代码,结果如下

程序代码意思是:先给本地的数组的每个位置赋值,然后接收我们输入的字符串,再通过字符串对比函数来对比输入的字符串是否和本地校验的字符串一样,于是在strcmp 处下断点,位置如下

启动Ollydbg ,随意输入字符串

Ollydbg 会卡在0x40109D 这个地方(下断点的快捷键是F2 )

查看寄存器窗口,可以看到flag


###2.RE-100 Writeup

同样是转换到伪C 代码分析

程序原理:判断输入的字符串长度是否为19 ,符合的话把输入的字符串里面的每个字符的值加50 和byte_408030 里面的数据进行对比,于是我们把进去byte_408030 ,设置它的Array (数组)长度

然后按几下d 键把这个串转换成char

提取这些数据出来,拿到python 里面做逆运算(因为程序是把我们输入的数据加上50 再和这些数据做比较的,所以我们把这些数据减50 就可以获取到原来的字符串了)

code=[0x9A,0xA4,0x95,0xA4,0x98,0xAD,0x84,0x77,0x63,0x62,0x62,0x91,0x75,0x93,0x9E,0x95,0xA7,0xAF]

for index in code :
    print chr(index-50),


###3.RE-250 Writeup

在main 函数的入口处和之前所见的有点不同,我们直接关注jmp loc_401113

跳到jmp loc_401113 中分析代码,可以看到这里有SEH 异常处理,异常回调的地址是0x401053

往下分析,程序会执行到0x40115A ,这是一个无效的指令,于是会印发SEH 异常处理,程序跳转到0x401053

于是找到0x401053 ,分析

可以看到这里的对比运算:输入的字符串和byte_40B938 里面的数据做异或运算之后再对比两个字符是否相同,异或运算的key 是80 加上当前对比的偏移位置,于是可以写出解密python

code=[0x38,0x23,0x31,0x27,0x32,0x2E,0x4,0x32,0x7,0x6B,0x6F,0x6B,0x3,0x25,0x31,0x2D,0x1D]
xor_number=80

for index in code :
    print chr(index^xor_number),
    xor_number+=1


###4.RE-500 Writeup

第一步首先要绕过IDA 本身的bug ,因为IDA 默认是从第一区块开始解析数据的,但是在入口点中的跳转却是在第一区块之前的,所以IDA 无法从这个位置中获取数据,于是使用OllyDbg 跟踪

跟踪到0x401041 处,继续往下单步

可以看到这又是SEH 异常处理,直接跳到0x404100

来到0x404100 ,先给它创建函数

创建函数之后的变化

然后用Hex-ray转换

进去到0x401014

切换回汇编窗口查看代码

继续跳到0x40199E 去分析,这里创建一个线程,线程入口地址是0x401023 ,于是我们过去分析这个函数的功能

发现这里一直死循环调用两个函数

sub_40102D 的代码如下(为什么会显示sub_401400 呢?因为代码是从sub_40102D 直接jmp 到sub_401400 的):从PEB 中获取程序是否被调试

Sub_401028 的功能是直接调用IsDebuggerPresent() 获取是否被调试

转换到汇编,可以发现,每次检测到程序被调试的话就会除0 ,产生异常退出程序,于是这个线程是用来反调试的

回去主线代码继续分析,遇到代码混淆

先到0x4019C8 中用c 键把代码转换成二进制数据

再到0x4019C9 中用d 键把二进指数据转换成代码,转换之后的代码如下:

继续往下分析,这里计算函数的真实地址,具体作用还不知道

继续往下,发现程序又创建新线程

于是我们查看线程里面的代码,这里是要让我们输入flag

再往下,线程自己就关闭了

主线代码里面在创建线程成功之后就阻塞等待它关闭,如果创建失败的话就关闭程序

继续往下,发现又有新线程…

在线程执行的代码最后有一处混淆

因为Push EAX + Retn 等价于Jmp Eax ,eax 的值是ecx+40 (sub -40 等于add 40),ecx 的值是这个函数的入口地址,于是可以计算出接下来程序运行到这里的将会跳转到下面这个地址

0x401610+0x40=0x401650

跳转到此

C 键转换代码

然后又是过混淆,相信大家已经明白啦

下面遇到switch 语句,先来分析下每个cases 的意义

Case 0 是检测程序是否被调试

Case 1 往缓冲区中写ERROR

Case 2 输出刚才的缓冲区

Case 3 把OK 写入缓冲区

Case 4 是flag 对比,然后我们把精力主要集中在此

这里调用了两个未知的函数,先忽略他们,继续往下分析

发现下面有一段数据

然后把这段数据和另一个缓冲区做对比

往上寻找EBP-0x28 ,发现刚才忽略的函数有利用到这两个缓冲区

在分析sub_401019 中发现,这个应该是加密函数

函数的参数有两个,于是回去看看到底程序传哪两个参数进去

可以看到,一个是0x10 ,一个是缓冲区地址,所以我们可以大胆的确定,a1 是要加密的数据地址,a2 是数据长度

给加密函数中的变量写好命名,整体的加密流程也就一看明了

于是获取到这段加密过后的字符串

放到python 里面解码

def decode(string) :
    for index in range(0,16,2) :
        string[index]=string[index]^16
        string[index+1]=string[index+1]^16
        bit_1_high=string[index]&0xF
        bit_2_low=(string[index]&0xF0)>>4
        bit_2_high=string[index+1]&0xF
        bit_1_low=(string[index+1]&0xF0)>>4
        source_bit_1=bit_1_high*16+bit_1_low
        source_bit_2=bit_2_high*16+bit_2_low
        print chr(source_bit_1),chr(source_bit_2),
    
code=[0xE7,0x86,0xE7,0x45,0x06,0x26,0xE6,0xF5,0x06,0xC6,0x46,0xA6,0x05,0xE6,0xD6,0xD6]
decode(code)

合起来就是hrctf:{you_can_make_all}

More Repositories

1

Source-and-Fuzzing

一些阅读源码和Fuzzing 的经验,涵盖黑盒与白盒测试..
C++
970
star
2

Machine-Learning-Note

机器学习笔记
Python
426
star
3

Fuzzing-ImageMagick

OpenSource My ImageMagick Fuzzer ..
Mask
295
star
4

PHP-WebShell-Bypass-WAF

分享PHP WebShell 绕过WAF 的一些经验 Share some experience about PHP WebShell bypass WAF and Anti-AV
PHP
282
star
5

network_backdoor_scanner

This is a backdoor about discover network device ,and it can hidden reverse connecting the hacker's server with encrypt commuication 后渗透后门程序,适合在已经攻陷的内网中做下一步的网络信息扫描..
C++
182
star
6

vuln_javascript

模拟一个存在漏洞的JavaScript 运行环境,用来学习浏览器漏洞原理和练习如何编写Shellcode (a JavaScript Execute Envirment which study browser vuln and how to write Shellcode ) ..
C++
180
star
7

PHP_Source_Audit_Tools

PHP 白盒分析工具,结合AST 和数据流跟踪分析代码,达到自动化白盒审计功能
Python
146
star
8

Hacker_Document

收集一些以前看过对于入门和进阶很有用的攻击原理文档..
142
star
9

WebShell-Detect-By-Machine-Learning

使用机器学习识别WebShell
Python
127
star
10

browser_vuln_check

browser_vuln_check ,利用已知的浏览器漏洞PoC 来快速检测Webview 和浏览器环境是否存在安全漏洞,只需要访问run.html 即可获取所有扫描结果,适用场景包含:APP 发布之前的内部安全测试,第三方Webview 漏洞检测等(browser_vuln_check framework using some known browser vulnerabilities PoC to quick automate aduit WebView or Browser security ,apply to application security before issue and detecting third-part WebView security)..
Python
117
star
11

CVE-2017-7269-Echo-PoC

CVE-2017-7269 回显PoC ,用于远程漏洞检测..
Python
88
star
12

Think-in-Security

从二进制到WEB ,分享我在安全路上的思考与点滴,后面会不断地更新..
76
star
13

Angr-CTF-Learn-Note

The learn note of Angr-CTF ..
49
star
14

qemu-fuzzer

Qemu Fuzzer.针对Qemu模拟设备的模糊测试工具,主要思路是Host生成种子Data,然后传递给Guest中转程序,由中转程序访问MMIO,以达到和模拟设备的交互,不同于qtest自带的fuzzer.
C
43
star
15

XSS-hunter

XSS hunter 收集Webview 页面上存在的反射,储存型XSS ,方便应急APP 和前端页面在发布时遇到XSS 安全问题..
PHP
42
star
16

etherum_rpc_steal

The Etherum RPC Steal Toolset and honeypot .以太坊"偷渡"漏洞利用和蜜罐工具集.
Python
40
star
17

Kite

Browser Fuzzing Framework ,浏览器Fuzzing 框架..
HTML
31
star
18

klee-fl

KLEE-fl : Compile Project to Bitcode and Try Fuzzing with KLEE .
C++
27
star
19

my-blog

我的技术博客,记录成长
C++
26
star
20

Aurora_CAPTCHA

极光验证码,为反爬虫而生
Python
25
star
21

My_PoC

Collect some PoC that I writted .记录自己写过的PoC ..
Python
23
star
22

KiMi-VulnBot_Framework

KiMi 漏洞感知机器人扫描框架 @KiMi-VulnBot @KiMiThreatPerception
Python
22
star
23

cve_diff_checker

快速对自己项目中引入的第三方开源库进行1day patch检索,patch数据每天晚上11点更新
Roff
20
star
24

FreeWebpilotInChatGPT35

非付费的chatgpt3.5 用户也可以使用付费的chatgpt4 Webpilot 插件. Free ChatGPT 3.5 users can also use the paid ChatGPT 4 Webpilot plugin.
JavaScript
19
star
25

dns_hijack_server

A dns server that use to hijack other dns request in a wifi network for redirect to your custem http server ..
C++
16
star
26

browser_xss_auditor_fuzzing

浏览器XSS 过滤器Fuzzing 框架 (browser xss aduit fuzzing framework )..
HTML
15
star
27

blue_fariy

github 项目代码加密,在不创建github 私有项目的前提下使用github 更新代码又不希望自己的核心代码公开,bule_fariy.py 可以在git push 之前自动加密所有代码(Encrypt your Github repository code before git push )
Python
15
star
28

Python_CookieLib_0day

Using This 0-day to Anti-Python-Spider ..
PHP
14
star
29

Supplicant_Exploit_Kit

Sise supplicant exploit kit -- 华软蝴蝶漏洞利用工具包..
C++
13
star
30

Ethereum_Similar_Contract_Classify

Python
12
star
31

blockchain_story

酒剑论江湖,区块有故事..
12
star
32

BitLeague

聚合交易平台BitLeague
Python
11
star
33

pseudo-protocals-digger

system pseudo protocals digger for windows -- Windows 系统下的伪协议查看工具
Python
11
star
34

cross_domain_postmessage_vuln_dig

WEB 跨域postMessage() 漏洞挖掘工具,基本原理:使用AJAX 获取页面代码,结合iframe 和data 协议构造测试环境,然后在iframe 下的window.onmessage 中插入hook 监控onmessage 的参数,最后通过能否被原来的onmessage 逻辑引用参数中的data 属性来判断是否可以跨域传递数据..
HTML
11
star
35

Big_Project

我就笑笑不说话,哈哈哈哈..
7
star
36

Distributed-Task-Queue

Dynamic Expand Distributed Task Queue (分布式任务队列框架)
Python
7
star
37

ethereum_solidity_symbol_execute

Ethereum Solidity Symblo Execute Demo -- Check Vuln and Auto Build Payload ..
Python
6
star
38

supplicant_getadaptersinfo_dll

Bypass for supplicant server NAT validate .蝴蝶NAT 认证绕过DLL ..
C++
5
star
39

DCpp_Exploit_Kit

Sise DC++ exploit kit -- 华软DC++ 漏洞利用工具包..
C++
5
star
40

file_crypter

A Simple Malware Example About File Crypter Like CTB-locker ;文件劫持病毒实例代码,就像CTB-Locker 一样加劫持用户交钱恢复被加密的文件..
C
4
star
41

Vending_Machine

2012 的开发代表作品,自动售货机,那年开始从底层出发到硬件设计,这些都是乐趣所在,做一些很酷的东西一直都是追求的目标,从自动售货机的开发过程中开始逐渐萌生出Small System 的雏形,但是由于很多种原因没有办法继续开发下去,最后完成自动售货机是在2013 年的冬天也就是高三,那四天的日子也是我在科技协会一直记住的美好时光,感谢你们的支持,虽然你们可能看不到我在这里所写的东西,如果没有你们设计箱子做电路也就没有后面的故事,谢谢你们..
C
4
star
42

PyDbg_Document

This document is collect interface's using in PyDbg.py and conver to markdown for anybody convenient reading ..
Python
3
star
43

quick_scan_virus

a security tool for quick scan some virus and APT
Python
3
star
44

JPEG-Locker

2013 的开发代表作品,JPEG 保护者.Protect your JPEG picture and more important information .WARNING ! If you want to use my code ,please update the module - PictureLock.bas .I tested patch a key jmp and bypass the valid program could using arbitrarily string to decrypt protecting file .So I hope you can rewrite this module and all encrypt input file with password and XOR .
Visual Basic
2
star
45

USB-firewall

2011 的开发代表作品,2010 年吃了很多苦头才有点入门Windows 系统编程,U 盘防火墙是看了很多VB VC 病毒编写的代码和原理才写的,毕竟10 年一半的时间在学习编程一半时间在学习黑客技术,虽然一次都没有黑成功,但是积累了很多在以后都挺实用的理论.U 盘防火墙可以在一定程度上防止U 盘上的病毒入侵到主机..
Visual Basic
2
star
46

Lap-Game

2010 的开发代表作品,这是刚开始学写程序的第一年,是一个拥有智能AI 的圈叉游戏,AI 不仅可以防守,而且还可以进攻,当年写这段代码还没放到电脑上运行的时候是写在笔记本上面一步步在脑里面运行的,曾经现场运行这段代码来和真人对抗,诚然,现在早已忘记开发的乐趣,那个夕阳西下的时候,我曾经对未来拥有多大的憧憬,但是最后得到了经验,得到了技术,却早已失去掉曾经的乐趣,我想,最悲哀的故事也莫过于此吧,这就是在大学为什么不打算走开发而是做逆向工程的原因,人,最痛苦的事情就是挑起他最不愿意的担子去做他最喜爱的事情..
Visual Basic
2
star
47

python_compiler

Python 指令编译工具(Python Instruction Compiler )..
Python
1
star