Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/112: Рейтинг темы: голосов - 112, средняя оценка - 4.89
675 / 421 / 44
Регистрация: 09.07.2012
Сообщений: 1,419

Помощь по коду anti-debugging

17.05.2013, 23:27. Показов 23587. Ответов 120
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет!
Можете помочь по коду anti-debugging.

Требуется создать второй процесс, который подключится дебаггером к основному, и тем самым не позволит к нему приатачиться еще раз.

По инструкции http://csharptest.net/1051/man... -debugger/ пока что не получилось добиться рузельтата.
Спасибо.

PS:
API:
Debugger.IsAttached
IsDebuggerPresent
CheckRemoteDebuggerPresent
Не то.

Добавлено через 13 часов 26 минут
Разобрался, работает. Приаттачиться действительно не могу
Обойти можно легко, но надо знать что такое есть.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.05.2013, 23:27
Ответы с готовыми решениями:

Нужна помощь по коду Хэмминга
Помогите пожалуйста закодировать массив, состоящий из чисел типа BYTE, не добавляя "лишней" информации(то есть например при коде...

При Debugging'e программа работает, без Debugging'a - нет.
Всем доброго времени суток. Программа для проверки правильности расстановки скобок. Входной файл bracket.in, в первой строке файла...

Скрипт часов помощь по коду
Здравствуйте у меня есть скрипт часов ,но часы выводятся на компоненте баттон и только при нажатии на него,как сделать чтобы они просто...

120
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
21.05.2013, 22:23
Студворк — интернет-сервис помощи студентам
Psilon, ммм, да Я экспортировал нормально, через AlternateStreamView.

В архиве: файл из потока - оригинал и деобфусцированный/патченный exe.
Вложения
Тип файла: rar 1.rar (13.7 Кб, 18 просмотров)
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
21.05.2013, 22:25
NickoTin, не знаю, жамкал экспорт, ни в какую. А чем деобфусцировали?
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
21.05.2013, 22:25
Цитата Сообщение от Psilon Посмотреть сообщение
чем деобфусцировали?
de4dot
1
675 / 421 / 44
Регистрация: 09.07.2012
Сообщений: 1,419
22.05.2013, 09:13  [ТС]
NickoTin.

1.4 не запускается потому что у вас в списке процессов 3 "explorer.exe". При запуске проверка на их количество, не должно быть больше 1 процесса с таким именем. Упрощенная схема определения процесса родителя без вычисления его пути, и сравнения с директорией Windows.
explorer.exe - я не встречал ситуации когда их так много.

Возможно есть способ динамически изменить имя процесса, что бы пользователь не видел имя шаблона “processName.exe:NTFSstream.exe”. И усложнить процедуру получения NTFSstream.exe из потока. Тоже почитаю про это. Потоки не все что есть у NTFS.

Но в чем точно уверен, потоки не передаются по протоколу http, и значит любые онлайн сканеры ничего не увидят. Поэтому рекомендую вам проверять потоки в архивах. Информация взята из статьи Крис Касперски.
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
22.05.2013, 17:04
Цитата Сообщение от Dywar Посмотреть сообщение
explorer.exe - я не встречал ситуации когда их так много.
У проводника есть параметр, из-за которого каждый экземпляр проводника это новый процесс, чтобы если он упадет не упало всё. Так что не следует к этому привязываться.
Цитата Сообщение от Dywar Посмотреть сообщение
Упрощенная схема определения процесса родителя
Это определяется другим способом, так например. Но я бы тоже не привязывался к этому...
0
675 / 421 / 44
Регистрация: 09.07.2012
Сообщений: 1,419
22.05.2013, 21:20  [ТС]
Если буду использовать такой метод, то как и предполагалось ранее:
1) Смотрю кто запустил, и получаю полное имя этого процесса (содержит путь).
2) Смотрю где установлена Windows. В этой папке может быть только один Explorer.exe.
3) Сверяю пути, и ID процесса.
Порядок действий взял из книги Рикардо Норваха Cracking с нуля. Дочитал как раз до 46 главы.

Почитал про крипторы получше, там способов много, от самых простых до использования иконки как ресурса с телом программы (для меня это новость). И только полиморфные крипторы называют настоящими. Пока сам не напишешь не поймешь.

NickoTin.
У тебя есть опыт написания своих?
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
22.05.2013, 21:25
Dywar, нет, я не занимался(юсь) этими вопросами, я любитель
0
675 / 421 / 44
Регистрация: 09.07.2012
Сообщений: 1,419
23.05.2013, 09:27  [ТС]
Я тоже любитель
Язык C# пока только мое хобби. А в простонародье эникейщик от фото/видео/аудио монтажа, до пентеснига и программирования.
0
675 / 421 / 44
Регистрация: 09.07.2012
Сообщений: 1,419
26.05.2013, 16:42  [ТС]
Всем привет.
Версия 1.5.
Делал долго, т.к. первый раз с таким работал. Криптование, как смог пока что.

Отчет с VirusTotal: https://www.virustotal.com/en/... 369571106/
3 из 47 сказали что там троян, уверяю вас его там нет. Это CrackMev1.5.

Сам за собой чистит, главное что бы комп не был медленным, и успел за 3-5 секунд запустить процесс. Если выдал ошибку, запустите повторно.

Шифр AES. Файл в статику легко засунуть, много работы для следующего нашел, но с этим навозился достаточно, надо перерыв сделать.

Тестировал на Windows XP 32, Windows 7 32, Windows 8 64 (Скачивал и запускал). Антивирусом добавил файл в исключения, Sandboxie моего FireWall его взяло под свое крыло, но даже там он хорошо отработал.

Если не верите или не хотите запускать, то писать в тему не надо. На этом форуме я давно, файл чист.

http://rghost.ru/46272690
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
26.05.2013, 18:12
Dywar, как бы сказать так помягче... первый был наиболее интересным, т.к. пришлось декриптор строк писать, хотя скорее всего надо было просто de4dot заставить их расшифровать...

А в чем фишка тут? В том что нужно в PasswordBox ввести после последнего символа пароля еще один (любой)? (т.к. событие KeyDown срабатывает раньше чем меняется свойство Password, тем самым когда пароль введен, в переменной пароль без одного символа, нужно ввести еще один символ чтобы переменной присвоилось корректное значение).

p.s. Запустил только для проверки, и не мог воткнуть почему KG возвращает TRUE для пароля, а программа FALSE, а там оказывается "фишка" такая, поэтому имхо, защита от отладчика тут лишняя...

Name: Nicko (странное ограничение на 7 символов для юзернейма -_-)
Pass: dfc961617

KeyGen:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    static string KeyGen ( string user )
    {
        string s = user + "TryIt" + user.Length.ToString();
        string text = BitConverter.ToString( new SHA256Managed().ComputeHash( Encoding.Default.GetBytes( s ) ) ).Replace( "-", "" ).ToLower();
        string text2 = ReverseString( text );
        string s2 = string.Concat( new string[]
        {
            text2[1].ToString(),
            text[1].ToString(),
            text2[3].ToString(),
            text[3].ToString(),
            text2[5].ToString(),
            text[5].ToString(),
            text2[7].ToString(),
            text[8].ToString(),
            text2[9].ToString()
        } );
        return ReverseString( s2 );
    }
з.ы. понимаю, ломать не строить, но лучше так не строить )
з.ы.ы. А чего не использовали запуск из памяти?
0
675 / 421 / 44
Регистрация: 09.07.2012
Сообщений: 1,419
26.05.2013, 21:21  [ТС]
Запуск из памяти не получился.
Не на нашел рабочий пример, как поток байтов запустить приложением. Пробовал 3 варианта. Где то ошибку допускаю, надо смотреть. Если есть что подсказать, буду рад.

Семь символов на имя, это из-за шрифта, если написать семь раз "W", то имя как раз помещается в рамки окна. Что бы красиво было шрифт уменьшать не стал.

Алгоритмы генерации и проверки имя/пароль относительно слабые, потому что я не хочу тратить много времени на то что можно быстро посмотреть в исходниках. Только когда их добыча будет сложной, я буду уделять этому больше времени. Моя задача дойти самому до этого.

Есть ILprotector, с ним и первые CrackMe покажутся тяжелыми т.к. в отладчике не все чувствуют себя уверенно. Придется записывать в блокнот последовательность, или прогонять Trace и просматривать длинные логи (где все CrackMe от 1.0 до 1.5 благополучно записывают пароль в переменную, не долго еще я так буду делать), можно не ломать ничего он сам все выдаст.

Обфускатор использую один и тот же, просто для того что бы названия переменных менял.
Согласен, защита от отладчика лишняя когда исходники на руках, но как их тестирование и проверка самое то.
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
26.05.2013, 21:28
Цитата Сообщение от Dywar Посмотреть сообщение
Есть ILprotector
de4dot его снимает. Пробовал давненько правда, но думаю ничего не изменилось...
0
675 / 421 / 44
Регистрация: 09.07.2012
Сообщений: 1,419
26.05.2013, 22:27  [ТС]
de4dot - деобфусктор, по моим сведениям один из лучших.
ILprotector не обфусцирует, а скрывает код. (ILProtector transforms Intermediate Language (MSIL) code into a Virtual Machine ("VM").
Самые крутые защиты что о которых я слышал работают именно через свои VM.

Но это чужое, и проанализированное тысячу раз крякерами всех мастей.

У тебя есть наработки по запуску кода из памяти? те 3 метода что я испытывал рабочие, просто к моим exe не подходят, надо переделывать. Или ориентироваться сразу под такой запуск, что тоже надо проверять многократно и долго.
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
26.05.2013, 23:57
Цитата Сообщение от Dywar Посмотреть сообщение
de4dot - деобфусктор
deobfuscator/unpacker
Цитата Сообщение от Dywar Посмотреть сообщение
те 3 метода
Какие? Может мне нет смысла даже писать что я пробовал/смотрел когда-то...
0
675 / 421 / 44
Регистрация: 09.07.2012
Сообщений: 1,419
27.05.2013, 10:12  [ТС]
1) Запуск из памяти .Net приложений через
C#
1
2
3
4
5
6
7
8
9
10
11
Assembly a = Assembly.Load(new BinaryReader(input).ReadBytes((int)input.Length));
13   
14          MethodInfo method = a.EntryPoint;
15          //если найдена точка входа
16          if (method != null)
17          {
18              //создаем экземпляр главной формы
19              object o = a.CreateInstance(method.Name);
20              //запускаем приложение через точку входа
21              method.Invoke(o, null);
22          }
2) Запуск native exe из памяти
C#
1
2
3
4
5
6
7
8
9
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
using System;
using System.Runtime.InteropServices;
 
/*
* Title: CMemoryExecute.cs
* Description: Runs an EXE in memory using native WinAPI. Very optimized and tiny.
*
* Developed by: affixiate
* Release date: December 10, 2010
* Released on: [url]http://opensc.ws[/url]
* Credits:
* MSDN ([url]http://msdn.microsoft.com[/url])
* NtInternals ([url]http://undocumented.ntinternals.net[/url])
* Pinvoke ([url]http://pinvoke.net[/url])
*
* Comments: If you use this code, I require you to give me credits. Don't be a ripper! ;]
*/
 
// ReSharper disable InconsistentNaming
public static unsafe class CMemoryExecute
{
public struct STARTUPINFO
{
public uint cb;
public string lpReserved;
public string lpDesktop;
public string lpTitle;
public uint dwX;
public uint dwY;
public uint dwXSize;
public uint dwYSize;
public uint dwXCountChars;
public uint dwYCountChars;
public uint dwFillAttribute;
public uint dwFlags;
public short wShowWindow;
public short cbReserved2;
public IntPtr lpReserved2;
public IntPtr hStdInput;
public IntPtr hStdOutput;
public IntPtr hStdError;
}
 
/// <summary>
/// Runs an EXE (which is loaded in a byte array) in memory.
/// </summary>
/// <param name="exeBuffer">The EXE buffer.</param>
/// <param name="hostProcess">Full path of the host process to run the buffer in.</param>
/// <param name="optionalArguments">Optional command line arguments.</param>
/// <returns></returns>
public static bool Run(byte[] exeBuffer, string hostProcess, string optionalArguments = "")
{
// STARTUPINFO
STARTUPINFO StartupInfo = new STARTUPINFO();
StartupInfo.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow = SW_HIDE;
 
var IMAGE_SECTION_HEADER = new byte[0x28]; // pish
var IMAGE_NT_HEADERS = new byte[0xf8]; // pinh
var IMAGE_DOS_HEADER = new byte[0x40]; // pidh
var PROCESS_INFO = new int[0x4]; // pi
var CONTEXT = new byte[0x2cc]; // ctx
 
byte* pish;
fixed (byte* p = &IMAGE_SECTION_HEADER[0])
pish = p;
 
byte* pinh;
fixed (byte* p = &IMAGE_NT_HEADERS[0])
pinh = p;
 
byte* pidh;
fixed (byte* p = &IMAGE_DOS_HEADER[0])
pidh = p;
 
byte* ctx;
fixed (byte* p = &CONTEXT[0])
ctx = p;
 
// Set the flag.
*(uint*)(ctx + 0x0 /* ContextFlags */) = CONTEXT_FULL;
 
// Get the DOS header of the EXE.
Buffer.BlockCopy(exeBuffer, 0, IMAGE_DOS_HEADER, 0, IMAGE_DOS_HEADER.Length);
 
/* Sanity check: See if we have MZ header. */
if (*(ushort*)(pidh + 0x0 /* e_magic */) != IMAGE_DOS_SIGNATURE)
return false;
 
var e_lfanew = *(int*)(pidh + 0x3c);
 
// Get the NT header of the EXE.
Buffer.BlockCopy(exeBuffer, e_lfanew, IMAGE_NT_HEADERS, 0, IMAGE_NT_HEADERS.Length);
 
/* Sanity check: See if we have PE00 header. */
if (*(uint*)(pinh + 0x0 /* Signature */) != IMAGE_NT_SIGNATURE)
return false;
 
// Run with parameters if necessary.
if (!string.IsNullOrEmpty(optionalArguments))
hostProcess += " " + optionalArguments;
 
if (!CreateProcess(null, hostProcess, IntPtr.Zero, IntPtr.Zero, false, CREATE_SUSPENDED, IntPtr.Zero, null, ref StartupInfo, PROCESS_INFO))
return false;
 
var ImageBase = new IntPtr(*(int*)(pinh + 0x34));
NtUnmapViewOfSection((IntPtr)PROCESS_INFO[0] /* pi.hProcess */, ImageBase);
if (VirtualAllocEx((IntPtr)PROCESS_INFO[0] /* pi.hProcess */, ImageBase, *(uint*)(pinh + 0x50 /* SizeOfImage */), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE) == IntPtr.Zero)
Run(exeBuffer, hostProcess, optionalArguments); // Memory allocation failed; try again (this can happen in low memory situations)
 
fixed (byte* p = &exeBuffer[0])
NtWriteVirtualMemory((IntPtr)PROCESS_INFO[0] /* pi.hProcess */, ImageBase, (IntPtr)p, *(uint*)(pinh + 84 /* SizeOfHeaders */), IntPtr.Zero);
 
for (ushort i = 0; i < *(ushort*)(pinh + 0x6 /* NumberOfSections */); i++)
{
Buffer.BlockCopy(exeBuffer, e_lfanew + IMAGE_NT_HEADERS.Length + (IMAGE_SECTION_HEADER.Length * i), IMAGE_SECTION_HEADER, 0, IMAGE_SECTION_HEADER.Length);
fixed (byte* p = &exeBuffer[*(uint*)(pish + 0x14 /* PointerToRawData */)])
NtWriteVirtualMemory((IntPtr)PROCESS_INFO[0] /* pi.hProcess */, (IntPtr)((int)ImageBase + *(uint*)(pish + 0xc /* VirtualAddress */)), (IntPtr)p, *(uint*)(pish + 0x10 /* SizeOfRawData */), IntPtr.Zero);
}
 
NtGetContextThread((IntPtr)PROCESS_INFO[1] /* pi.hThread */, (IntPtr)ctx);
NtWriteVirtualMemory((IntPtr)PROCESS_INFO[0] /* pi.hProcess */, (IntPtr)(*(uint*)(ctx + 0xAC /* ecx */)), ImageBase, 0x4, IntPtr.Zero);
*(uint*)(ctx + 0xB0 /* eax */) = (uint)ImageBase + *(uint*)(pinh + 0x28 /* AddressOfEntryPoint */);
NtSetContextThread((IntPtr)PROCESS_INFO[1] /* pi.hThread */, (IntPtr)ctx);
NtResumeThread((IntPtr)PROCESS_INFO[1] /* pi.hThread */, IntPtr.Zero);
 
 
return true;
}
 
#region WinNT Definitions
 
private const uint CONTEXT_FULL = 0x10007;
private const int CREATE_SUSPENDED = 0x4;
private const int MEM_COMMIT = 0x1000;
private const int MEM_RESERVE = 0x2000;
private const int PAGE_EXECUTE_READWRITE = 0x40;
private const ushort IMAGE_DOS_SIGNATURE = 0x5A4D; // MZ
private const uint IMAGE_NT_SIGNATURE = 0x00004550; // PE00
 
private static short SW_SHOW = 5;
private static short SW_HIDE = 0;
private const uint STARTF_USESTDHANDLES = 0x00000100;
private const uint STARTF_USESHOWWINDOW = 0x00000001;
 
 
#region WinAPI
[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool CreateProcess(string lpApplicationName, string lpCommandLine, IntPtr lpProcessAttributes, IntPtr lpThreadAttributes, bool bInheritHandles, uint dwCreationFlags, IntPtr lpEnvironment, string lpCurrentDirectory, ref STARTUPINFO lpStartupInfo, int[] lpProcessInfo);
 
[DllImport("kernel32.dll", SetLastError = true)]
private static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);
 
[DllImport("ntdll.dll", SetLastError = true)]
private static extern uint NtUnmapViewOfSection(IntPtr hProcess, IntPtr lpBaseAddress);
 
[DllImport("ntdll.dll", SetLastError = true)]
private static extern int NtWriteVirtualMemory(IntPtr hProcess, IntPtr lpBaseAddress, IntPtr lpBuffer, uint nSize, IntPtr lpNumberOfBytesWritten);
 
[DllImport("ntdll.dll", SetLastError = true)]
private static extern int NtGetContextThread(IntPtr hThread, IntPtr lpContext);
 
[DllImport("ntdll.dll", SetLastError = true)]
private static extern int NtSetContextThread(IntPtr hThread, IntPtr lpContext);
 
[DllImport("ntdll.dll", SetLastError = true)]
private static extern uint NtResumeThread(IntPtr hThread, IntPtr SuspendCount);
#endregion
 
#endregion
}
 
Note that you have to inject into %WINDIR%\Microsoft.NET\Framework\v2.0.50727\vbc.ex e. It seems to be the only process that works with this code or "RunPE" variants. It must be a 32 bit exe you are injecting, and you must compile the .NET app that uses this as x86, not x64 or AnyCPU. This is important, it took me a year to learn theses conditions the hard way.
3) Последний execute byte array
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
 
namespace DynamicX86
{
    class Program
    {
        const uint PAGE_EXECUTE_READWRITE = 0x40;
        const uint MEM_COMMIT = 0x1000;
 
        [DllImport("kernel32.dll", SetLastError = true)]
        static extern IntPtr VirtualAlloc(IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);
 
        private delegate int IntReturner();
 
        static void Main(string[] args)
        {
            List<byte> bodyBuilder = new List<byte>();
            bodyBuilder.Add(0xb8);
            bodyBuilder.AddRange(BitConverter.GetBytes(42));
            bodyBuilder.Add(0xc3);
            byte[] body = bodyBuilder.ToArray();
            IntPtr buf = VirtualAlloc(IntPtr.Zero, (uint)body.Length, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
            Marshal.Copy(body, 0, buf, body.Length);
 
            IntReturner ptr = (IntReturner)Marshal.GetDelegateForFunctionPointer(buf, typeof(IntReturner));
            Console.WriteLine(ptr());
        }
    }
}
Если есть что подсказать буду рад!
1
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
27.05.2013, 11:14
Цитата Сообщение от Dywar Посмотреть сообщение
Запуск native exe из памяти
С .NET не прокатит, т.к. в инжектируемый процесс не загружена CLR, можно попробовать загрузить руками, но думаю этого не хватит, нужно еще как минимум PEB править, имхо... Можно поискать упаковщики которые работают с .NET'ом (несколько видел когда-то) и попробовать изучить их принцип работы, но это всё в теории... Чего-то конкретного предложить не смогу.
0
675 / 421 / 44
Регистрация: 09.07.2012
Сообщений: 1,419
27.05.2013, 13:32  [ТС]
Кому интересно:
В 1.5 CrackMe я распакованный файл в %temp%, с заданным именем. И сканировал процессы на его запуск (каждый несколько секунд, использовал таймер), если его там нет, то файл удалял процессом распаковщиком, который запускался в скрытом режиме, и автоматически завершал свою работу при стандартном выходе из CrackMe 1.5.
*.bat использовать не стал, хотя в интернете находил именно такие советы.

Есть еще 4 вариант. Я его пока не особо хочу рассматривать.

Файл можно сказать тоже будет только в памяти. Дело в том что можно создать пустой файл в %temp%, и записать мой "exe" к нему в именованный поток NTFS, и запустить из него. Код у меня уже есть отработанный с CrackMe 1.4.
Разница в том что этот самый файл и поток можно удалить сразу после запуска! Процесс будет работать, а файла уже не будет. С натяжкой можно сказать что он в памяти
Эта операция пройдет мгновенно. Только в отладчике можно словить, или средством восстановления файлов. Выдаст ошибку на FAT32, именно поэтому я ищу запуск из памяти.
0
 Аватар для m0nax
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
27.05.2013, 14:44
на счет запуска кода из памяти - можно сам код хранить в виде исходника-строки, а по мере надобности компилировать его и запускать внутри себя
в дотнете есть все необходимое для этого в пространстве имен System.CodeDom
строку можно зашифровать например, в итоге может и выйдет защита от декомпиляции, но это все конечно не словах хорошо..
0
675 / 421 / 44
Регистрация: 09.07.2012
Сообщений: 1,419
27.05.2013, 16:32  [ТС]
m0nax
Так точно, можно, но не сейчас.
Для сначала надо научиться из ресурсов запускать в память.
0
675 / 421 / 44
Регистрация: 09.07.2012
Сообщений: 1,419
29.05.2013, 19:16  [ТС]
Научился писать в NTFS поток, "text" или "byte array" из ресурсов проекта.
Запускается, консоль или легкие оконные приложения на .Net, и даже calc.exe, cmd.exe и справка (native).
Более серьезные exe не запускаются, там где графики много. Не запускаются они даже если из cmd пишу как если бы без C#.
Честно не знал и не пробовал ничего кроме калькулятора и CrackMev1.1 до этого дня. Потратил сутки на запись, и в конце на тебе, NTFS не магия.
Как думаете, если я запущу простое оконное приложение, а уже оно запустит основное, сработает? Скоро проверю.

И да, я могу удалить файл который запущен в процессах! Это действительно так.

Добавлено через 22 часа 39 минут
С NFTS потоками повозился немного, информации мало по факту запуска/ошибки разных программ. Что то работает, а что то нет. Вставлял простые окна в свои приложения, они запускались, но как только я из этого окна нажимал перейти к основному приложению происходила ошибка. Но все равно этот способ хорош, так как и .Net и Native если сработают, то это будет 100% хороший запуск.

Научился запускать приложения .Net из памяти, наконец то. Обратил внимание на tutor который задвинул в долгий ящик, буду теперь там читать дальше. Из всех файлов стало запускаться по сравнению с NTFS на один больше!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.05.2013, 19:16

Real time debugging
Каким образом это можно реализовать в XNA? Что я хочу, так это следующее: при компиляции проекта должно запускаться два окна - игра и окно...

Debugging на реальном устройстве
на днях решил занятся Android Studio и появился вопрос: у меня телефон Cubot note s, Android 5.1,а комп Hp pavilion g6, никак не могу...

Start with not debugging VS2008 и VS2010
Вопрос по запуску без отладки в visual studio 2008 и 2010. При запуске приложения через ctrl+f5 в VS2008 Professional в конце работы...

USB debugging via ADB sideload
Moguli ya vkluchit USB debugging s pomowyu adb sideload?

IntelliJ Community и Remote Deployment\Debugging
Здравствуйте Коллеги. У меня следующая проблема. Я хочу развернуть IntelliJ (и писать код) на виндовой машине, но при этом сам код...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru