2018_05_30_키트리_침해대응
http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=215&sca=10b0
# include <stdio.h>
void GuGuDan(int param1, int param2);
int main(void) {
int minV = 0x0;
int maxV = 0x0;
char* sPrompt = "%d %d";
__asm {
LEA EDI, DWORD PTR[maxV];
PUSH EDI; // &maxV;
LEA EDI, DWORD PTR[minV];
PUSH EDI; // &minV;
PUSH DWORD PTR[sPrompt]; // "%d %d"
CALL DWORD PTR[scanf];
// FUNCTION parameter
PUSH DWORD PTR[maxV];
PUSH DWORD PTR[minV];
// sub function(GuGuDan) call
CALL DWORD PTR[GuGuDan];
// stack 정리
ADD ESP, 0x8
POP EBX;
POP EBX;
POP EBX;
}
return 0;
}
void GuGuDan(int param1, int param2) {
char* sData = "%d x %d = %d\n";
int Gu_ = 0x0;
int d1 = 0x1;
int r = 0xA;
//printf("param1 => %d\n", param1);
//printf("param2 => %d\n", param2);
__asm {
MOV ECX, 0xA;
L:
MOV EAX, dword ptr[param1]; // EAX = param1
MUL dword ptr[d1]; // EAX *= d1
PUSH EAX; // (EAX)
PUSH dword ptr[d1]; // (d1, EAX)
PUSH dword ptr[param1]; // (param1, d1, EAX)
PUSH dword ptr[sData]; // ("%d x %d = %d\n", param1, d1, EAX)
CALL dword ptr[printf];
// printf("%d x %d = %d\n", param1, d1, EAX)
ADD ESP, 0X10; // 스택 정리
// d1 increament
ADD dword ptr[d1], 0x1;
MOV EAX, dword ptr[r];
DEC EAX;
MOV dword ptr[r], EAX;
MOV ECX, dword ptr[r];
loop L;
}
Gu_ = 0x0;
d1 = 0x1;
r = 0xA;
__asm {
MOV ECX, 0xA;
L1:
MOV EAX, dword ptr[param2]; // EAX = param1
MUL dword ptr[d1]; // EAX *= d1
PUSH EAX; // (EAX)
PUSH dword ptr[d1]; // (d1, EAX)
PUSH dword ptr[param2]; // (param1, d1, EAX)
PUSH dword ptr[sData]; // ("%d x %d = %d\n", param1, d1, EAX)
CALL dword ptr[printf];
// printf("%d x %d = %d\n", param1, d1, EAX)
ADD ESP, 0X10; // 스택 정리
// d1 increament
ADD dword ptr[d1], 0x1;
MOV EAX, dword ptr[r];
DEC EAX;
MOV dword ptr[r], EAX;
MOV ECX, dword ptr[r];
loop L1;
}
} // end of GuGuDan function
'어셈블리' 카테고리의 다른 글
xor (0) | 2018.06.14 |
---|---|
어셈블리 (push / pop) (0) | 2018.06.14 |
2018_05_30_01 (0) | 2018.05.29 |
오늘 공부한 내용 날림 나 혼자 보려고 끄적인 것 (0) | 2018.01.22 |
네이버 풀이 (0) | 2017.12.22 |