-
-
[讨论]buuctf两道休闲题(2021羊城杯babysmc,Crakme)
-
发表于: 2022-5-10 21:31 6383
-
打开程序按顺序分析发现这一步有一个直接访问内存的Call
执行call之后下方数据发生变化
从自解密函数向下找,找到所属的retn,将retn包含的函数体框起来,右键按照图里操作
出现这个窗口选择force,之后就能F5了
跟随动态调试进入解密后的函数,这个程序是变形的base64
四个字母为一组,右移0,2,4,6后,作为v95的角标,分别和0xA6,0XA3,0XA9,0XAC做与运算
输入数组做完以上运算和v84做比较
先将字符串四个一组做与运算的反运算
然后和v95数组内的值比较,得到对应的角标
将角标字符串做base64反向编码
v3返回值恒定是1
sub_CE1830的返回值为1 ——>Format
format=congratulation
v4=pleace try again
博客:https://qwer597.github.io/
提前将重要的代码节进行加密,或将加密数据提前存放在内存中,并且配有一个解密函数。
再静态调试中很难观察出有用的信息
这种加密算法可以被用来做免杀,防止特征码被查杀
特征:在汇编代码中夹杂大片的数据
提前将重要的代码节进行加密,或将加密数据提前存放在内存中,并且配有一个解密函数。
再静态调试中很难观察出有用的信息
这种加密算法可以被用来做免杀,防止特征码被查杀
特征:在汇编代码中夹杂大片的数据
#include <stdio.h>
#include <string.h>
int
main(void)
{
unsigned char key[]
=
"H>oQn6aqLr{DH6odhdm0dMe`MBo?lRglHtGPOdobDlknejmGI|ghDb<4"
;
int
data[]
=
{
0xE4
,
0xC4
,
0xE7
,
0xC7
,
0xE6
,
0xC6
,
0xE1
,
0xC1
,
0xE0
,
0xC0
,
0xE3
,
0xC3
,
0xE2
,
0xC2
,
0xED
,
0xCD
,
0xEC
,
0xCC
,
0xEF
,
0xCF
,
0xEE
,
0xCE
,
0xE9
,
0xC9
,
0xE8
,
0xC8
,
0xEB
,
0xCB
,
0xEA
,
0xCA
,
0xF5
,
0xD5
,
0xF4
,
0xD4
,
0xF7
,
0xD7
,
0xF6
,
0xD6
,
0xF1
,
0xD1
,
0xF0
,
0xD0
,
0xF3
,
0xD3
,
0xF2
,
0xD2
,
0xFD
,
0xDD
,
0xFC
,
0xDC
,
0xFF
,
0xDF
,
0x95
,
0x9C
,
0x9D
,
0x92
,
0x93
,
0x90
,
0x91
,
0x96
,
0x97
,
0x94
,
0x8A
,
0x8E
};
int
xr[]
=
{
0xA6
,
0xA3
,
0xA9
,
0xAC
};
int
i, j;
unsigned
int
v3;
int
flag[
100
]
=
{
0
};
for
(i
=
0
; i <
56
; i
+
+
)
{
key[i] ^
=
xr[i
%
4
];
/
/
printf(
"%d "
,key[i]);
}
/
/
printf(
"\n"
);
for
(i
=
0
; i <
56
; i
+
+
)
for
(j
=
0
; j <
64
; j
+
+
)
if
(key[i]
=
=
data[j])
{
key[i]
=
j;
/
/
printf(
"%d:%d "
,i,j);
break
;
}
for
(i
=
0
, j
=
0
; i <
56
; i
+
=
4
, j
+
=
3
)
{
v3
=
key[i
+
3
]
+
(key[i
+
2
] <<
6
)
+
(key[i
+
1
] <<
12
)
+
(key[i] <<
18
);
flag[j]
=
(v3 >>
16
) &
0xFF
;
flag[j
+
1
]
=
(v3 >>
8
) &
0xFF
;
flag[j
+
2
]
=
v3 &
0xFF
;
}
for
(i
=
0
; i <
100
; i
+
+
)
printf(
"%c"
,flag[i]);
return
0
;
}
#include <stdio.h>
#include <string.h>
int
main(void)
{
unsigned char key[]
=
"H>oQn6aqLr{DH6odhdm0dMe`MBo?lRglHtGPOdobDlknejmGI|ghDb<4"
;
int
data[]
=
{
0xE4
,
0xC4
,
0xE7
,
0xC7
,
0xE6
,
0xC6
,
0xE1
,
0xC1
,
0xE0
,
0xC0
,
0xE3
,
0xC3
,
0xE2
,
0xC2
,
0xED
,
0xCD
,
0xEC
,
0xCC
,
0xEF
,
0xCF
,
0xEE
,
0xCE
,
0xE9
,
0xC9
,
0xE8
,
0xC8
,
0xEB
,
0xCB
,
0xEA
,
0xCA
,
0xF5
,
0xD5
,
0xF4
,
0xD4
,
0xF7
,
0xD7
,
0xF6
,
0xD6
,
0xF1
,
0xD1
,
0xF0
,
0xD0
,
0xF3
,
0xD3
,
0xF2
,
0xD2
,
0xFD
,
0xDD
,
0xFC
,
0xDC
,
0xFF
,
0xDF
,
0x95
,
0x9C
,
0x9D
,
0x92
,
0x93
,
0x90
,
0x91
,
0x96
,
0x97
,
0x94
,
0x8A
,
0x8E
};
int
xr[]
=
{
0xA6
,
0xA3
,
0xA9
,
0xAC
};
int
i, j;
unsigned
int
v3;
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2022-6-15 10:57
被wx_好一脚头球编辑
,原因:
赞赏
他的文章
- [求助]confuser手动脱壳缺少模块 4520
- Net脱壳修复失败 3739
- [求助]dnspy修改代码后不能保存 4582
- CreateProcess启动指定程序不能保持运行 3953
- [求助]QT缺失<QtWin>的头文件,如何解决 5240
看原图
赞赏
雪币:
留言: