본문 바로가기

분류 전체보기264

(HackCTF) childheap writeup unsigned __int64 Malloc() { int v0; // ebx int v2; // [rsp+0h] [rbp-20h] BYREF int v3; // [rsp+4h] [rbp-1Ch] BYREF unsigned __int64 v4; // [rsp+8h] [rbp-18h] v4 = __readfsqword(0x28u); printf("index: "); __isoc99_scanf("%d", &v2); if ( v2 4 ) exit(1); printf("size: "); __isoc99_scanf("%d", &v3); if ( v3 128 ) exit(1); v0 = v2; *(&ptr + v0) = malloc(v3); if ( !*(&ptr + v2).. 2022. 2. 10.
(BOJ) 5014 풀이 5014 #include #define MAX 1000001 using namespace std; int visited[MAX + 1]; int main(void) { ios::sync_with_stdio(0); cin.tie(0); int F, S, G, U, D, flag = 0; cin >> F >> S >> G >> U >> D; queue Q; fill(visited, visited + F+1, -1); Q.push(S); visited[S] = 0; while (!Q.empty()&&flag==0) { int v = Q.front(); Q.pop(); for (auto m : {U,-D}) { if(v==G){ cout 2022. 2. 9.
(HackCTF) j0n9hyun’s secret writeup int __cdecl main_(int argc, const char **argv, const char **envp) { __int64 v3; // rdx int v4; // edx int v5; // ecx int v6; // er8 int v7; // er9 int v9; // [rsp+Ch] [rbp-4h] setvbuf(off_6CA748, 0LL, 2LL, 0LL); setvbuf(off_6CA740, 0LL, 2LL, 0LL); setvbuf(off_6CA738, 0LL, 2LL, 0LL); top_secret = open("top_secret", 'r', v3); printf("input name: "); scanf("%s", &input, v4, v5, v6, v7); v9 = read(t.. 2022. 2. 9.
(HackCTF) babyheap writeup malloc, free, show 3 가지 메뉴가 있는 전형적인 heap chall 이다. chunk 는 순서대로 6개 할당할 수 있다. unsigned __int64 Show() { int v1; // [rsp+4h] [rbp-Ch] BYREF unsigned __int64 v2; // [rsp+8h] [rbp-8h] v2 = __readfsqword(0x28u); printf("index: "); _isoc99_scanf("%d", &v1); puts((&ptr)[v1]); return __readfsqword(0x28u) ^ v2; show() 에서 인덱스를 검사하지 않는다. 사실 어셈으로 보면 있는데, 로직을 이상하게 짜놔서 검사를 안하는 것이나 다름없다. 할당 기회가 6번밖에 없으니, 이건 fa.. 2022. 2. 8.