抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

补码:

补码计算法定义:非负数的补码是其原码本身;负数的补码是其绝对值的原码最高位符号位不变,其它位取反,再加1。

左移 右移 注意溢出

(a&0x3f) << 2

左移2位,与上0x3f 也就是 0011 1111 将最高两位置为0

同理右移2位 &0xfc 也就是 1111 1100 将最低两位置为0

算法特征

base 64特征点 base表, &0x3f 数据左移 ‘=’

res[i]=base64_table[str[j]>>2]; //取出第一个字符的前6位并找出对应的结果字符 res[i+1]=base64_table[(str[j]&0x3)<<4 | (str[j+1]>>4)]; //将第一个字符的后位与第二个字符的前4位进行组合并找到对应的结果字符
res[i+2]=base64_table[(str[j+1]&0xf)<<2 | (str[j+2]>>6)]; //将第二个字符的后4位与第三个字符的前2位组合并找出对应的结果字符
res[i+3]=base64_table[str[j+2]&0x3f]; //取出第三个字符的后6位并找出结果字符
SM4 异或^和循环左移<<<

TEA delta:通常为0x9e3779b9 4和5同时出现时要注意

XTEA delta:通常为0x9e3779b9

RC4 在初始化的过程中,密钥的主要功能是将S盒搅乱,对S盒一系列操作

识别重点:
2个长度为256的For循环
S盒乱序时的数据交换
以及最后的异或加解密

CRC16 异或上0x1021 用python爆破时要异或 0x11021

IDA宏定义:

#define BYTEn(x, n) (((_BYTE)&(x)+n))

#define BYTE0(x) BYTEn(x, 0)

#define BYTE1(x) BYTEn(x, 1)

#define BYTE2(x) BYTEn(x, 2)

elf文件被加了壳,查不出来,可能是upx,使用Idc脚本解题。

跳转是 jmp 寄存器 无法被解析 我们直接修改为jmp 地址(注意从上一条那条指令开始修改 不然要修改到下面的地址)

因为这里上一条覆盖了 我们到跳转点写一个相同的指令

多分析string

注意各变量的应用及其改变

go逆向使⽤idagolanghelper

评论