题目描述题目名称NewRC4
题目难度★★
题目分值475
前置知识1、查壳以及UPX脱壳
2、RC4加密算法
考察知识点1、UPX魔改壳
2、RC4加密算法+魔改
解题工具1、Exeinfo
2、010Editor
3、IDA
4、python3
解题步骤第一步:题目信息使用Exeinfo查看程序基本信息,发现了UPX压缩壳
第二步 :解题过程1、使用UPX尝试脱壳,发现报错
于是拖到010里面查看详细信息,看到原本应该是“UPX”的地方变成了VMP,把所有的VMP改为UPX,
保存后再次尝试脱壳,成功脱壳
2、进IDA里查看,点进main函数
v3 = 256LL; Buf1[0] = -1099083345; Buf1[1] = 2129584582; Buf1[2] = 1339278712; Buf1[3] = -1197737055; Buf1[4] = 632459247; Buf1[5] = -1426643507; Buf1[6] = -314991759; Buf1[7] = -1937737471; Buf1[8] = -1369194 ...
零、前言在CTF比赛中,逆向题目通过IDA反编译后为C/C++的汇编逻辑。而我们作为打比赛的,最常用的语言肯定是python了。
问题是,就算我们逆出来逻辑完全一样,但我们在编译器里实际编译出来却跑出了乱码。大多数时候,只是我们没想到两语言之间的整数溢出不同。
问题:逆向逻辑完全正确,但 Python 解密出来是乱码。
本文仅浅谈相关例子与建议
一、C 与 Python 整数模型差异C 语言整数C 中整数是 固定宽度。
类型
位宽
char
8 bit
short
16 bit
int
32 bit
long long
64 bit
例如:
unsigned char
只有 8 bit,在IDA中以BYTE显示,范围是0 ~ 255。
位结构11111111
↑
8 bit
最大值:
255
Python 整数Python 使用:
Arbitrary Precision Integer
也就是:
无限精度整数
示例:
2 ** 1000
在 Python 中完全合法。
但在 C 中会溢出。
二、什么是整数溢出例子:
unsigned c ...
CryptoBASE ALL
题目描述:哇!怎么这么多,搁这套娃呢?
下载文件,打开是一堆编码:
JJFEIRKNKJFUYS2KIZKTIVCDJJGEUQ2VJ5KTEVCLGVDFMRKTGJDEWTSMIVLVIQ2MJJNEIRSNKRFVOS2OIVKVKUSTJJFVURKWI5KTESKKJZBVMVKWKNIEWSK2IRCVEMSLJFHEWVSTKUZEYR2KIVKEWU2TKVFFMSKUIVKEWS2MJJDFMSKSJNLUWTSMIVHVMU2EJFLEIVSJKVNFGSSOJRCUOUSLJRFVKWSFJFJUWS2KIZBVKS2VLJJUWNKGIU2FGMSGJFLEYVKHKRJUQS22IVCUWVBSKZGEUSSVKNKFGRSJKVNEMT2VKNLEUTSOIVKVMQ2MJNGVURSRKNFFMSK2INLE6VKTGJFTKRCVGRJTERSLIZFFIRKRGJFUSWSGKZFVMMSPJNHEGRKXKNJUQS22JNLEGVJSLFFE4RCFKFJFGSSLGVFFKVKTKNFUUVSMIU3FMUSTJN ...
CRYPTOECDSA
ECDSA一定是安全的吗?提交格式:flag{私钥的MD5值}
打开附件,
#!/usr/bin/env python3from ecdsa import SigningKey, NIST521pfrom hashlib import sha512from Crypto.Util.number import long_to_bytesimport randomimport binasciiimport sysdigest_int = int.from_bytes(sha512(b"Welcome to this challenge!").digest(), "big")curve_order = NIST521p.orderpriv_int = digest_int % curve_orderpriv_bytes = long_to_bytes(priv_int, 66)sk = SigningKey.from_string(priv_bytes, curve=NIST521p)vk = sk.verifying_key ...
一些概念的介绍反编译器原理从exe文件的入口AddressOfEntryPoint开始,依序扫描字节码,并将其转换为汇编代码。
比如第一个16进制字节码为0xE8(其一般代表CALL指令),且后面跟着的4个字节数据都与地址有关,则反编译器就读取该5个字节,而且反编译为CALL 0x地址。
线性反编译若反编译过程中只要一个地方反编译出错,例如两条指令之间多了0xE8,那么反编译器则会将其后跟着的4个字节处理为CALL指令地址相关数据给反编译成CALL 0x地址指令。
但实际上0xE8后面的四个字节为单独的字节码指令。
线性扫描从入口开始,一次解析一条指令,遇到分支指令不会递归进入分支
递归下降当使用线性扫描时,遇到call或jmp时,不会跳转到对应地址进行反编译,而是反编译其后下一条指令。
递归下降分析,当遇到分支指令时,会递归进入分支进行反汇编。
基本介绍花指令,从字面上看就是干扰正常程序内容阅读、反编译的一些代码块。是CTF中企图隐藏出题人不想被基础逆向操作所反编译出的一种方法,在正常代码之中加入垃圾代码,又可以保证原有程序正确执行。
花指令不会阻碍动态调试,但会加大了静态分析的难度 ...
