전체 글 (32) 썸네일형 리스트형 Layer7 - 리버싱 10차시 과제 prob-begin main함수에선 16바이트를 입력받고 initcpu함수로 값을 복사한다. 그리고 복사한 값을 runcpu함수로 전달한다. runcpu함수를 보면 전형적인 vm문제이다. stub배열에 있는 값을 opcode로 사용하고 opcode에 따라서 우리가 입력한 값에다가 덧셈, 뺄셈, xor, or등 다양한 연산을 수행한다. 일단 여기까지만 봤을때 IDA가 잘못 해석한게 있다. 포인터 연산을 할때 인덱스에다가 4를 곱하니까 이 함수에 전달되는 인자는 __int64가 아니라 그냥 int타입이다. 그리고 runcpu함수에 전달되는건 포인터니까 runcpu의 매개변수인 a1변수도 __int64 a1에서 int a1로 바꿔준다. 이렇게 잘못 해석된 변수들의 타입을 바꿔주면 우리가 보기 편하게 표시가 된.. Layer7 - 리버싱 9차시 과제 prob-begin int __cdecl main(int argc, const char **argv, const char **envp) { char s[16]; // [rsp+0h] [rbp-210h] BYREF unsigned __int64 v5; // [rsp+208h] [rbp-8h] v5 = __readfsqword(0x28u); printf("Flag: "); __isoc99_scanf("%16s", s); if ( strlen(s) == 16 && 378 * s[14] + 809 * s[13] + -967 * s[12] + 362 * s[11] + -404 * s[10] + 429 * s[9] + 463 * s[8] + -449 * s[7] + 851 * s[6] + 417 * s[5] + -.. Layer7 - 리버싱 8차시 과제 rev-basic-8 보호되어 있는 글입니다. 이전 1 2 3 4 5 6 7 ··· 11 다음