小菜鸟一枚 发表于 2019-9-20 21:56

今天学习了c语言文件操作,做了一个简单的CM

本帖最后由 小菜鸟一枚 于 2019-9-20 21:58 编辑

今天学习了c语言文件操作,于是就想到读取文件来比较字符串是否相等,于是做了这样一个CM。

编译器:vs2010
简单说下程序流程:
输入16位正确的字符串
和txt文件中的字符串做异或比较
相等的话,txt文件会写入正确的字符串,也就是我们输入的那个字符串!

输入错误,程序直接退出!

说明:成功和失败都没有提示信息,但是成功后txt文件里面的字符串会替换成正确的,也就是源码压缩包密码。

小菜鸟在这里恳请各位大牛,留下破解思路,希望能学习到大家的独门绝技,谢谢!


C语言源代码下载地址:链接:https://pan.baidu.com/s/1MwYIBPByd6wvHNKQVVLzRA
提取码:86pj
复制这段内容后打开百度网盘手机App,操作更方便哦

源码压缩包密码为:破解成功后txt文件里面的字符串!

梦游枪手 发表于 2019-9-20 22:19

直接丢IDA
signed int wmain()
{
unsigned int v0; // kr00_4
signed int i; // ecx
unsigned int v3; // kr04_4
FILE *(__cdecl *v4)(const char *, const char *); // ebx
FILE *v5; // eax
FILE *v6; // esi
void (__cdecl *v7)(FILE *); // edi
signed int v8; // eax
FILE *v9; // esi
char Filename; //
int v11; //
int v12; //
int v13; //
int v14; //
char Buf; //
int v16; //
int v17; //
__int64 v18; //
int v19; //
int v20; //
int v21; //
int v22; //
char v23; //
__int16 v24; //
char v25; //

strcpy(Filename, "52pojie.txt");
v13 = 0;
v14 = 0;
v19 = '24XB';
v22 = '1J6D';
v20 = 'T3TE';
v21 = 'V23K';
v24 = 0;
v25 = 0;
v23 = 0;
strcpy(Buf, "reading GO!!!");
*(_DWORD *)((char *)&v18 + 2) = 0;
HIWORD(v18) = 0;
printf(
    &Format,
    *(_DWORD *)Filename,
    v11,
    v12,
    0,
    0,
    *(_DWORD *)Buf,
    v16,
    v17,
    (unsigned __int64)(unsigned __int16)v18,
    '24XB',
    'T3TE',
    'V23K',
    '1J6D',
    0);
scanf("%s", &v19);
v0 = strlen((const char *)&v19);
if ( v0 > 0x10 )
    return -1;
for ( i = 0; i < (signed int)v0; ++i )
    *((_BYTE *)&v19 + i) ^= 0x52u;
v3 = strlen((const char *)&v19);
v4 = fopen;
v5 = fopen(Filename, "r");
v6 = v5;
if ( v5 )
{
    if ( !feof(v5) )
    {
      do
      fgets(Buf, v3 + 1, v6);
      while ( !feof(v6) );
    }
    v7 = (void (__cdecl *)(FILE *))fclose;
    fclose(v6);
    v4 = fopen;
}
else
{
    v7 = (void (__cdecl *)(FILE *))fclose;
}
if ( !strcmp((const char *)&v19, Buf) )
{
    if ( strlen((const char *)&v19) != 16 || strlen(Buf) != 16 )
      return 0;
    v8 = 0;
    do
      *((_BYTE *)&v19 + v8++) ^= 0x52u;
    while ( v8 < 16 );
    v9 = v4(Filename, "w");
    fputs((const char *)&v19, v9);
}
else
{
    v9 = v4(Filename, "w");
    fputs("o%%%|g`\"=8;7|1<o", v9);
}
v7(v9);
return 1;
}
直接看出key xor 0x52 = o%%%|g`\"=8;7|1<o
解出 key为
=www.52pojie.cn=

小菜鸟一枚 发表于 2019-9-20 22:24

梦游枪手 发表于 2019-9-20 22:19
直接丢IDA
signed int wmain()
{


好吧,IDA功能真强大,我现在只会用OD{:1_909:},琢磨了很久,一直不知道怎么F5分析

kamui 发表于 2019-9-21 02:08

代码好短,看起来还是挺容易的

whc2001 发表于 2019-9-21 06:10

小菜鸟一枚 发表于 2019-9-20 22:24
好吧,IDA功能真强大,我现在只会用OD,琢磨了很久,一直不知道怎么F5分析

IDA加载完文件之后双击一个子函数进入反汇编窗口,然后在这个窗口里直接按键盘的F5应该就能反编译出C语言代码,论坛里分享的绿色版7.0就可以,你可以试试,对分析长逻辑和看不明白汇编的来讲非常有用

a192424 发表于 2019-9-21 07:55

好深奥菜鸟一枚

小菜鸟一枚 发表于 2019-9-21 08:19

whc2001 发表于 2019-9-21 06:10
IDA加载完文件之后双击一个子函数进入反汇编窗口,然后在这个窗口里直接按键盘的F5应该就能反编译出C语言 ...

好的,谢谢你,我试试!{:1_893:}

minibeetuaman 发表于 2019-9-21 09:18

哈哈,瞬间被F5变成裸奔了

cptw 发表于 2019-9-21 09:44


好深奥菜鸟一枚

ccyang 发表于 2019-9-21 10:34

学不会ing
页: [1] 2 3
查看完整版本: 今天学习了c语言文件操作,做了一个简单的CM