004
4/15/21
pwnable.kr - RSA calculator not done, im tired :( - 4/15/21
RSA - explanation and implementation
Exploitation
int RSA_encrypt() {
undefined4 extraout_EAX;
size_t sVar1;
long lVar2;
undefined8 *puVar3;
long in_FS_OFFSET;
bool bVar4;
byte bVar5;
uint local_142c;
int local_1428;
int local_1424;
int local_1420;
char local_1419;
undefined8 local_1418 [512];
char local_418 [1032];
bVar5 = 0;
if (is_set == 0) {
puts("set RSA key first");
}
else {
local_142c = 0;
printf("how long is your data?(max=1024) : ");
scanf(&DAT_00401543,&local_142c,&local_142c);
if (local_142c < 0x401) {
local_1428 = 0;
fgetc(stdin);
puts("paste your plain text data");
while (bVar4 = local_142c != 0, local_142c = local_142c - 1, bVar4) {
sVar1 = fread(&local_1419,1,1,stdin);
local_1420 = (int)sVar1;
if (local_1420 == 0) {
exit(0);
}
if (local_1419 == '\n') break;
local_418[local_1428] = local_1419;
local_1428 = local_1428 + 1;
}
memcpy(g_pbuf,local_418,(long)local_1428);
local_1424 = 0;
while (local_1424 < local_1428) {
encrypt((char *)(ulong)(uint)(int)(char)g_pbuf[local_1424],0x6020c0);
*(undefined4 *)(g_ebuf + (long)local_1424 * 4) = extraout_EAX;
local_1424 = local_1424 + 1;
}
lVar2 = 0x80;
puVar3 = local_1418;
while (lVar2 != 0) {
lVar2 = lVar2 + -1;
*puVar3 = 0;
puVar3 = puVar3 + (ulong)bVar5 * -2 + 1;
}
local_1424 = 0;
while (local_1424 < local_1428 << 2) {
sprintf((char *)((long)local_1418 + (long)(local_1424 * 2)),"%02x",
(ulong)(byte)g_ebuf[local_1424]);
local_1424 = local_1424 + 1;
}
puts("-encrypted result (hex encoded) -");
puts((char *)local_1418);
}
else {
puts("data length exceeds buffer size");
}
}
return 0;
}Last updated