__int64 __fastcall sub_140001000(__int64 a1)
{
int i; // [rsp+0h] [rbp-18h]
for ( i = 0; (unsigned __int64)i < 0x1F; ++i )
{
if ( (i ^ (unsigned __int8)__ROL1__(*(_BYTE *)(a1 + i), i & 7)) != byte_140003000[i] )
return 0;
}
return 1;
}
프로그램의 IDA로 실행한 결과
__ROL1__ 알고리즘을 통해서 알 수 있음
ROL 1 즉 1바이트의 값이므로 0~7까지의 값을 가진다 따라서ㅡ i&7을 통해서 자릿수를 맞춰준 모습
i&7 == i%8 이랑 동치이다.
i^ ~~ 을 통해서 XOR 연산을 진행하는 것을 알수 있다.
ROL 함수로 나온 값을 i와 XOR 연산을 한다
A^B^A를 하면 B의 값을 구할 수 있으므로
원본값으로 복원하기 위해서
후처리된 값을 XOR 하고 ROR을 하게 되면 원본값을 획득할 수 있다/
byte = [82, 223, 179, 96, 241, 139, 28, 181, 87, 209, 159, 56,
75, 41, 217, 38, 127, 201, 163, 233, 83, 24, 79, 184,
106, 203, 135, 88, 91, 57, 30, 0]
xor = []
answer = []
def ROR(x, r):
r &= 7
if r == 0:
return x
return ((x >> r) | (x << (8 - r))) & 0xFF
for i in range(len(byte)):
xor.append(byte[i] ^ i)
for i in range(len(xor)):
answer.append(ROR(xor[i], i%8))
for i in range(len(answer)):
print(chr(answer[i]), end="")
ROR 함수 구현
1. 0xff ->
0xff = 1111111 로 구성됨
8비트 값으로 유지하기 위해서 나머지 셈처리
'HACKING' 카테고리의 다른 글
| ChatGPT도 해킹당한다: OWASP LLM Top 10으로 배우는 AI 보안 입문 (0) | 2026.06.10 |
|---|---|
| Prompt Injection이 SQL Injection보다 무서운 이유 — LLM 시대의 새로운 보안 위협 (0) | 2026.06.08 |
| 표 데이터에서 XGBoost가 딥러닝을 이기는 이유 (0) | 2026.06.03 |
| [GEOINT] Caught in the Act - 사진 한 장으로 대학교 찾기 (0) | 2026.04.23 |
| 해커를 꿈꾼다면? 초보부터 전공자까지 무조건 읽어야 할 보안 도서 TOP 5 (0) | 2026.04.15 |

