- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
#include <iostream>
#include <fstream>
using namespace std;
//ifstream in("C://Users//Илья//Desktop//calc.exe", ios::binary);
ifstream in("C://Users//Илья//Desktop//kernel32.dll", ios::binary );
ofstream out("D:\\hello.txt");
void printhex(int position, int size)
{
int *A = new int[size];
int n = 0;
in.seekg(position);
for (int i = 0; i < size; i++)
{
n = in.get();
A[i] = n;
}
for (int i = (size-1); i >= 0; i--)
{
printf("%02X", A[i]);
}
cout << endl;
}
int printdec(int position, int size)
{
int* A = new int[size];
int n = 0;
int result = 0;
in.seekg(position);
for (int i = 0; i < size; i++)
{
n = in.get();
A[i] = n;
}
for (int i = (size-1); i >= 0; i--)
{
result = result * 16 * 16 + A[i];
}
return result;
}
int main()
{
char c;
int n;
unsigned int n1 = 0;
in.seekg(60); //положение байта, содержащего значение смещения;
n1 = in.get();
printf("%02X", n1); //вывод смещения;
cout << endl;
in.seekg(n1); //положение подписи (PE);
for (int i = 0; i < 4; i++)
{
c = in.get();
cout << c; //вывод подписи (PE)
}
cout << endl;
int numb_of_sect = printdec(n1 + 6, 2);
cout << numb_of_sect << endl;
printhex(n1 + 24, 2);
printhex(n1 + 24 + 28, 4);
printhex(n1 + 24 + 28 + 68, 4);
int adr = printdec(n1 + 24 + 28 + 68, 4);
cout << "-----------------" << endl;
if(adr==0) //проверка наличия таблицы экспортов;
{
cout << "The export table is missing." << endl;
}
}