外贸公司网站建设 重点是什么意思,小程序代理能赚钱吗,长沙网站制作品牌,网站运营工作流程运行可以发现这是输入型的flag
#xff08;re题目分为两类#xff0c;一种你直接输入flag#xff0c;还有一种就是你完成某个操作后#xff0c;给你flag#xff09; 可以发现关键字符串就是wrong 和 input 32位
IDA打开 进入直接进入字符串界面#xff0c;发现关键字符… 运行可以发现这是输入型的flag
re题目分为两类一种你直接输入flag还有一种就是你完成某个操作后给你flag 可以发现关键字符串就是wrong 和 input 32位
IDA打开 进入直接进入字符串界面发现关键字符串
int __cdecl main(int argc, const char **argv, const char **envp)
{int i; // ebxchar v4; // alint result; // eaxint v6; // [esp0h] [ebp-70h]int v7; // [esp0h] [ebp-70h]char Buffer[2]; // [esp12h] [ebp-5Eh] BYREFchar v9[20]; // [esp14h] [ebp-5Ch] BYREFchar v10[32]; // [esp28h] [ebp-48h] BYREF__int16 v11; // [esp48h] [ebp-28h]char v12; // [esp4Ah] [ebp-26h]char v13[36]; // [esp4Ch] [ebp-24h] BYREFstrcpy(v13, 437261636b4d654a757374466f7246756e);while ( 1 ){memset(v10, 0, sizeof(v10));v11 0;v12 0;sub_40134B(aPleaseInputYou, v6);scanf(%s, v9);if ( strlen(v9) 0x11 )break;for ( i 0; i 17; i ){v4 v9[i];if ( !v4 )break;sprintf(Buffer, %x, v4);strcat(v10, Buffer);}if ( !strcmp(v10, v13) )sub_40134B(aSuccess, v7);elsesub_40134B(aWrong, v7);}sub_40134B(aWrong, v7);result --Stream._cnt;if ( Stream._cnt 0 )return _filbuf(Stream);Stream._ptr;return result;
}
跟进后可以看见这串字符串
分析过来就是437261636b4d654a757374466f7246756e
这串东西就是你输入的flag的ASCII码的16进制
在C语言中字符直接转换为int是ASCII编码
对应的脚本
import libnum
a0x437261636b4d654a757374466f7246756e
print(libnum.n2s(a))这是python自带的库
还有一种脚本就是二进制方面的了
while a:flagchr(a 0xff)aa8
print(flag)
print(flag[::-1]) 这里解释下这个脚本
第一个脚本
就是利用一个叫libnum的库没什么可讲的
第二个脚本
补充个知识
异或^就是 二进制上相同为 0 不同为 1
安位与就是 二进制上 两个都为1就为1其他为0
这里的a 0xff
0xff就是八个比特一个字节 也就是一个char类型的大小
这个脚本的意思就是保留最后八位也就是原本最后的一个char字符我们把他提出来
因为是倒着来的所以最后flag要倒着输出我觉得这个知识点很符合我们RE希望大家多多斟酌
上次有个也学二进制的人给我留言我回复很慢有问题直接加QQ1559820232备注一些CSDN就行这样博客的问题我知道的可以和大家讨论
下班