Комментарии 48
потрясающе! использование таких методов хотя бы в части функционала (например, кодирование импортируемых функций при динамическом импорте) уже приведет к путанице реверсера (:
спасибо за статью, очень интересно!
спасибо за статью, очень интересно!
0
Думаю, реверсер даже не заметит подмены. Ему-то в отладчике всё равно смотреть в эти байтики во всех возможных представлениях. Увидев что-то похожее на текст, он моментально переключится в режим отображения ASCII-символами и будет прав.
+24
Я предлагаю так писать финансовое ПО (щютка).
0
Вас уже заждались в команде разработчиков ProGuard :D
-3
вот что бывает, когда программистам скучно :-D
0
C#
Console.WriteLine(
(new List {279544143478566788, 8437057322050937631})
.Aggregate("", (s, x) =>
{while(x>0){s=((x%34==33)?' ':(char)(x%34-1+'а'))+s;x/=34;}return s;}));
+2
C#, для разнообразия на лямбде
Func〈ulong, string〉 f = null;
f=(n)=>""+((n==0)?"":f(n/34)+((n%34==33)?' ':(char)(n%34-1+'а')));
ulong[]code={814315,1196087757209127883,1402407386743198646,8253365425410800148};
Console.WriteLine(code.Aggregate("", (s, x) => f(x) + s));
0
Один раз действительно использовал похожее в курсовой работе, только там строчка была побольше, поэтому пришлось использовать массив чисел, к элементам которого применялись дополнительные преобразования
-2
int A = 2037539149;
Бил бы ногами за несоблюдение диапазона…
Бил бы ногами за несоблюдение диапазона…
-7
По первому варианту: нет гарантии, что в АП процесса сразу после переменной A в стеке будут нули. Поэтому, в более общем случае в long (32-битный) можно поместить до 3 символов (включительно) плюс завершающий NULL. В 64-битный — до 7 (также включительно).
+11
Так можно и до незаконных чисел докатиться.
+20
Вот уж не знал)))) Прикольно так над копирастами издеваются))))
0
Monolith (в статье «Незаконное число» упоминается, monolith.sourceforge.net/) — «коза» в адрес правообладателей.
0
Никогда и в мыслях не было, так подписываться :)
-1
int A = 2037539149;
printf((char *)&A);
А откуда берется нолик в конце? O_O
0
У меня там вообще «Maryx (».
0
Соглашусь с более ранним комментарием — нет символа конца строки, поэтому выводится что-то из-за пределов переменной.
0
Это уже от машины зависит — если 64-битная платформа с соответствующим компилятором и little-endian, то int это 8 байт, и нолики там найдутся в старших разрядах
А вот с переносимостью такого кода — фигня-с™
А вот с переносимостью такого кода — фигня-с™
0
В общем на самом деле уровень чисто школьный))))) мы как раз этим в школе баловались чтобы лучше понять суть строк ;)
-1
НЛО прилетело и опубликовало эту надпись здесь
Объясните, пожалуйста, непросвещенному, как из 0x7972614D получается 2037539149.
Спасибо!
Спасибо!
0
пользователи ARM'а и SPARC v9 не одобряют этот пост!
+1
Напомнило преобразование ip адреса в число, тоже можно вставить в подпись.
0
ссылка в догонку www.allredroster.com/iptodec.htm
0
НЛО прилетело и опубликовало эту надпись здесь
вот-вот.
+6
Нулевой байт в конце строки и правда как-то упущен. зато при некоторых компиляторах и их параметрах можно использовать ситуацию когда переменные располагаются в памяти подряд:
int A = 2037539149;
int B = 2037539149;
int C = 0;
printf((char *)&A);
например такая махинация у меня (gcc 4.4.5, x86, опции по-умолчанию) вывела «MaryMary»
int A = 2037539149;
int B = 2037539149;
int C = 0;
printf((char *)&A);
например такая махинация у меня (gcc 4.4.5, x86, опции по-умолчанию) вывела «MaryMary»
+2
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Числовые подписи