Security ★ Development(154)
-
api 리버싱 2 - RtlNumberGenericTableElements, RtlIsGenericTableEmpty
이번에는 RtlNumberGenericTableElements라는 함수를 보겠습니다.앞의 것은 이전과 같으니 건너뛰고MOV EAX, DWORD PTR DS : [EAX+14]이것만 보겠습니다.EAX는 구조체에서 14 의 오프셋을 가진 위치입니다.이 위치를 eax에 넣고 eax는 리턴됩니다. retn이 4인걸로 봐서 리턴 값은 하나이고 함수의 이름을 보면 테이블 요소의 개수를 뜻하므로 이 수를 리턴하는 것으로 추측할 수 있습니다. 그런데 이 수는 eax에 저장되어 있고 이는 eax+14의 값이었으므로 앞의 구조체는 다음과 같이 수정 될 수 있습니다.struct TABLE{ UNKNOWN Member1;UNKNOWN_PTR Member2; UNKNOWN_PTR Member3;UNKNOWN_PTR Member..
2015.01.27 -
퀵 정렬, 이진검색, parametric search 1 aggressive
문제는 더블릿 10 퀵 정렬, 이진검색, parametric search에 있는 aggressive입니다.문제 사이트 주소입니다.http://183.106.113.109/30stair/aggressive/aggressive.php?pname=aggressive 우리의 위치와 소의 수가 주어졌을 때 소를 배치할 경우 소와 소의 가장 짧은 거리가 최대가 되는 때의 거리를 구하는 문제입니다. 1부터 입력받은 우리의 최대 위치까지 우선 정렬을 해야합니다. algorithm 헤더에 있는 sort를 이용했습니다. 이제 소를 놓을 수 있는 위치에 놓으면서 소와 소 끼리의 거리와 가능한지의 여부를 판단합니다.소와 소 끼리의 거리는 0과 우리의 최대 위치의 반 부터 시작합니다. 그럼 대략 처음 값은 500000000이 ..
2015.01.27 -
api 리버싱 1 - RtInitializeGenericTable
리버싱의 일부분으로 특정 api에 대해 정보를 찾는 방법을 알아보겠습니다.여기서는 ntdll.dll에 있는 윈도우 네이티브 api인 generic table api를 대상으로 합니다.그럼 generic table api에 포함되는 적절한 함수를 찾아야합니다. 이 때 필요한 것이 generic table api가 구현되어 있는 ntdll.dll과 dumpbin입니다. dumpbin을 위와 같이 사용하면 ntdll.dll의 함수목록이 나열되어있는 txt파일을 생성할 수 있습니다. 여기서 generic table api 중 하나인 RtlNumberGenericTableElements 함수를 볼 수 있습니다. api를 조사하는데 가장 좋은 출발점은 사용된 구조체를 살펴보는 것입니다. geneic table ap..
2015.01.26 -
queue(bfs) 2 horse_knight
문제는 더블릿 14 queue(bfs)에 있는 horse_knight입니다.문제 사이트 주소입니다.http://183.106.113.109/30stair/horse_knight/horse_knight.php?pname=horse_knight 장기의 마와 체스의 나이트가 있고 이동할 수 있는 방향은 동일한데 마는 가는 길에 장애물이 있으면 갈 수 없습니다. 이때 출발지점부터 모든 칸에 대해 나이트가 마보다 빨리 갈 수 있는 칸의 수를 구하는 것입니다. 두 말 모두 갈 수 없으면 세지 않고 나이트만 갈 수 있는 곳은 나이트가 빨리 갔다고 간주합니다. 여기서는 모든 칸에 대해 라는 말이 있으므로 큐를 이용한 bfs를 씁니다. 각 위치와 각 위치별 이동 카운트를 가진 클래스 이용한 큐를 생성합니다. 그리고 첫번..
2015.01.24 -
배열 2 dwarf
문제는 더블릿 5 배열에 있는 dwarf입니다.문제 사이트 주소입니다.http://183.106.113.109/30stair/dwarf/dwarf.php?pname=dwarf 9개의 수 중에서 2개를 빼고 모든 수의 합이 100이 되는 7개의 수를 구하는 문제입니다. 처음 재귀를 이용해 백트래킹처럼 모든 수를 돌면서 구하는데 분명 합이 100임에도 문제의 테스트케이스와 맞지 않아 답이 되지 않더군요.단순히 for문만으로 돌면서 풀었습니다.2개의 수를 제외할 것이기 때문에 제외할 2개의 수를 for문으로 놔두고 그 안에서 이 2수를 제외한 모든 수의 합을 구하고 이때 합이 100이면 출력해주면 됩니다.
2015.01.23 -
2012 지역 본선 고등 1/5 koi_aio
문제는 더블릿 옥상에 있는 koi_aio입니다.문제 사이트 주소입니다.http://183.106.113.109/pool/koi_aio/koi_aio.php?pname=koi_aio 참가국, 학생 번호, 점수가 주어질 때 상위 3명을 구하는 문제입니다. 이때 같은 국가는 2개의 상만 받을 수 있습니다. 최근 문제는 특별한 알고리즘 기법보다는 그냥 구현문제가 주를 이루는 것 같네요. 이번 문제도 시키는대로 풀면 됩니다.입력을 모두 받고 2번째 까지는 상위2명을 아무런 제약없이 뽑습니다. 그리고 마지막 3번째 사람을 뽑을 때 상위 2명의 국가가 같은 경우 해당 국가는 뽑기에서 제외한다는 조건만 하나 더 주면 됩니다.
2015.01.18