1 место «Со скриптами на ТЫ» | Часть 1 | Деобфускация JavaScript для начинающих

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
742
Баллы
113

Jambo

Client
Регистрация
28.11.2019
Сообщения
7
Благодарностей
16
Баллы
3
Разбираю creepJS, переопределяю функции, но попадаю в ошибку "failed "prototype" in function". Как я понимаю, это потому что в созданной мной функции есть свойство prototype, а в оригинале его нет. Есть ли возможность создать функцию без прототипа? delete с этим свойством не работает(
 

rastvl

Client
Команда форума
Регистрация
16.01.2019
Сообщения
656
Благодарностей
1 053
Баллы
93
Есть ли возможность создать функцию без прототипа?
Да, как раз для таких моментов существует спецификация языка, которая говорит нам об этом:
86899

Под MethodDefinition подразумевается следующее(из той же спецификации):
86900

То есть создать функцию без свойства "prototype" можно как-то так:
JavaScript:
//Вариант 1 | bind вернёт новую функцию без prototype
function f() {
    //...
}
const ff = f.bind(this) //Вместо 'this' нужный контекст
console.log('prototype' in ff); //false - то что нужно

//Вариант 2 | можем создать функцию у объекта и позаимствовать её
const obj = {
    f() {
        //...
    }
}
const ff = obj.f;
console.log('prototype' in ff); //false - снова то, что нам нужно

//Вариант 2.1 | то же самое, что и вариант 2, только для геттера/сеттера
const obj = {
    get f() {
        //...
    }
}
console.log('prototype' in Object.getOwnPropertyDescriptor(obj, 'f').get); //false - и снова замечательно
+ ещё стрелочные функции, но не думаю, что они будут интересны в данном случае
 
Последнее редактирование:
  • Спасибо
Реакции: Jambo

Zedx

Client
Регистрация
12.06.2018
Сообщения
1 182
Благодарностей
822
Баллы
113
Спасибо за статью. Как раз решил поглубже изучить JS и искал что-то по этой теме.
 
  • Спасибо
Реакции: rastvl

rastvl

Client
Команда форума
Регистрация
16.01.2019
Сообщения
656
Благодарностей
1 053
Баллы
93
если есть что еще по теме - выкладывай, с удовольствием почитаем...
Прикреплять к самой статье не буду, так как не очень относится к деобфускации, но если вдруг кому интересно чем там выше занимался @Jambo делая такие штуки, то вот кое-что нашёл вам почитать для начала(последняя ссылка основная):
На английском, к сожалению, но увы, в рунете как-то подобные темы не очень освещены... С переводчиком пойдёт
 

nb2022

Новичок
Регистрация
23.01.2022
Сообщения
6
Благодарностей
0
Баллы
1
Очень круто, автору большой респект.;-) Увидел на ютубе, посмотрел залпом, тема развёрнута очень доходчиво. Даже с моими начальными знаниями веб-разработчика, удалось достичь такого результата:
Посмотреть вложение 86714
Будем дальше разбираться :ay:
Здравствуйте, могу я вам помочь? Я тоже хочу решить проблему с тестом
 

volody00

Client
Регистрация
06.09.2016
Сообщения
793
Благодарностей
812
Баллы
93
delete (только написал и тут же в голову пришло решение. ладно, ап не лишним будет для такой статьи)
 
Последнее редактирование:
  • Спасибо
Реакции: rastvl

rastvl

Client
Команда форума
Регистрация
16.01.2019
Сообщения
656
Благодарностей
1 053
Баллы
93
delete (только написал и тут же в голову пришло решение. ладно, ап не лишним будет для такой статьи)
Babel хорош в плане функционала, но с документацией у него всё плохо, поэтому зачастую приходится разбираться методом тыка.

Ну и вот я про клауд писал - https://habr.com/ru/articles/716434/ . Там тоже по деревьям гулял, может поможет.
А это просто по теме - https://habr.com/ru/articles/720588/
 
  • Спасибо
Реакции: volody00

FastSpace

Client
Read only
Регистрация
05.04.2018
Сообщения
665
Благодарностей
240
Баллы
43
Babel хорош в плане функционала, но с документацией у него всё плохо, поэтому зачастую приходится разбираться методом тыка.

Ну и вот я про клауд писал - https://habr.com/ru/articles/716434/ . Там тоже по деревьям гулял, может поможет.
А это просто по теме - https://habr.com/ru/articles/720588/
Почитал спасибо :-)

Как насчёт x-client-data? ) это уже не js
 

SlipDez

Client
Регистрация
18.07.2018
Сообщения
374
Благодарностей
70
Баллы
28
Статья огонь)

Подскажите, а если на странице нет обфускации но переменные называются просто буквами a b e n и тд. Как работать с объектами вида
  1. ApolloLink: (...)
    [*]Observable: (...)
    [*]concat: (...)
    [*]createOperation: (...)
    [*]empty: (...)
    [*]execute: (...)
    [*]from: (...)
    [*]fromError: (...)
    [*]fromPromise: (...)
    [*]getOperationName: (...)
    [*]makePromise: (...)
    [*]split: (...)
    [*]toPromise: (...)
    [*]__esModule: true
    [*]Symbol(Symbol.toStringTag): "Module"
    [*]get ApolloLink: ƒ ()
    [*]get Observable: ƒ ()
    [*]get concat: ƒ ()
    [*]get createOperation: ƒ ()
    [*]get empty: ƒ ()
    [*]get execute: ƒ ()
    [*]get from: ƒ ()
    [*]get fromError: ƒ ()
    [*]get fromPromise: ƒ ()
    [*]get getOperationName: ƒ ()
    [*]get makePromise: ƒ ()
    [*]get split: ƒ ()
    [*]get toPromise: ƒ ()
    [*][[Prototype]]: Object
Вычислять значение каждой функции и метода?
 

hulk45

Client
Регистрация
11.07.2018
Сообщения
38
Благодарностей
14
Баллы
8
Статья огонь)

Подскажите, а если на странице нет обфускации но переменные называются просто буквами a b e n и тд. Как работать с объектами вида
  1. ApolloLink: (...)
    [*]Observable: (...)
    [*]concat: (...)
    [*]createOperation: (...)
    [*]empty: (...)
    [*]execute: (...)
    [*]from: (...)
    [*]fromError: (...)
    [*]fromPromise: (...)
    [*]getOperationName: (...)
    [*]makePromise: (...)
    [*]split: (...)
    [*]toPromise: (...)
    [*]__esModule: true
    [*]Symbol(Symbol.toStringTag): "Module"
    [*]get ApolloLink: ƒ ()
    [*]get Observable: ƒ ()
    [*]get concat: ƒ ()
    [*]get createOperation: ƒ ()
    [*]get empty: ƒ ()
    [*]get execute: ƒ ()
    [*]get from: ƒ ()
    [*]get fromError: ƒ ()
    [*]get fromPromise: ƒ ()
    [*]get getOperationName: ƒ ()
    [*]get makePromise: ƒ ()
    [*]get split: ƒ ()
    [*]get toPromise: ƒ ()
    [*][[Prototype]]: Object
Вычислять значение каждой функции и метода?
Все верно. Зато один раз вычислишь, а дальше все будет понятно.
 
  • Спасибо
Реакции: SlipDez

SlipDez

Client
Регистрация
18.07.2018
Сообщения
374
Благодарностей
70
Баллы
28

SlipDez

Client
Регистрация
18.07.2018
Сообщения
374
Благодарностей
70
Баллы
28
Подскажите почему выскакивает эта ошибка


Error: Cannot find module 'E:\Deobf\index.js'
at Module._resolveFilename (node:internal/modules/cjs/loader:1077:15)
at Module._load (node:internal/modules/cjs/loader:922:27)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:23:47 {
code: 'MODULE_NOT_FOUND',
requireStack: []
}

говорится что не может найти модули но все модули установил

package.json
JavaScript:
{
  "name": "deobf",
  "version": "1.0.0",
    "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@babel/core": "^7.22.10",
    "@babel/generator": "^7.22.10",
    "@babel/parser": "^7.22.10",
    "@babel/traverse": "^7.22.10",
    "@babel/types": "^7.22.10"
  }
}
index.js пробовал также переименовать в index.mjs
JavaScript:
// index.mjs
import { parse } from "@babel/parser";
import { traverse } from "@babel/traverse";
import generate from "@babel/generator";
import * as t from "@babel/types";
import fs from "fc";

const code = fs.readFileSync('original.js', { encoding: 'utf-8' });
const ast = parse(code);

console.log(ast);
original.js
JavaScript:
console.log('Тест');


let k = 1 + 3;
return k ;
пробовал обновлять пакеты npm install
Устанавливал npm install @babel/core
Проверял что в terminal правильный путь
 
Последнее редактирование:

Besedi

Client
Регистрация
04.03.2019
Сообщения
234
Благодарностей
40
Баллы
28
Отвратительная подача материала, какими то обучающим ролик (первый) точно назвать нельзя, просто рабочий процесс и мысли вслух.
 

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 127
Благодарностей
484
Баллы
83
Отвратительная подача материала, какими то обучающим ролик (первый) точно назвать нельзя, просто рабочий процесс и мысли вслух.
Благодаря этому отвратительному материалу большое количество человек научились делать то, чему он учит. Как будто вы деньги за эту статью заплатили)
 

Besedi

Client
Регистрация
04.03.2019
Сообщения
234
Благодарностей
40
Баллы
28
Благодаря этому отвратительному материалу большое количество человек научились делать то, чему он учит. Как будто вы деньги за эту статью заплатили)
Даже не знаю чему ты там из первого ролика мог научиться тому, чего не мог бы сам наклацать без предварительной подготовки
 

rastvl

Client
Команда форума
Регистрация
16.01.2019
Сообщения
656
Благодарностей
1 053
Баллы
93
  • Спасибо
Реакции: alcampo

alcampo

Client
Регистрация
06.01.2021
Сообщения
175
Благодарностей
132
Баллы
43
Даже не знаю чему ты там из первого ролика мог научиться тому, чего не мог бы сам наклацать без предварительной подготовки
Как вы смеете так обращаться с легендой зеннолаба. Может у вас не хватает знаний чтобы осилить данную статью которую вообщето показали бесплатно и на которую ушло уйма времени, сил и пота чтобы добиться подобных знаний? За такое инфоциганы могут с лёгкостью 500евро просить за час обучения...

Ёжик открыл глаза на многие вещи которые раньше даже и не подразумевались и если вы с этим не согласны, то сделайте лучше - я же знаю что у вас это не выйдет. Удачи победить акамай как сделал это ёжик.

П.д Если что чатгпт в помощь.
 
Последнее редактирование:
  • Спасибо
Реакции: n0n3mi1y

Besedi

Client
Регистрация
04.03.2019
Сообщения
234
Благодарностей
40
Баллы
28
Как вы смеете так обращаться с легендой зеннолаба. Может у вас не хватает знаний чтобы осилить данную статью которую вообщето показали бесплатно и на которую ушло уйма времени, сил и пота чтобы добиться подобных знаний? За такое инфоциганы могут с лёгкостью 500евро просить за час обучения...

Ёжик открыл глаза на многие вещи которые раньше даже и не подразумевались и если вы с этим не согласны, то сделайте лучше - я же знаю что у вас это не выйдет. Удачи победить акамай как сделал это ёжик.

П.д Если что чатгпт в помощь.
Как же мне повезло, что мне не нужно соревноваться с ёжиком в победе над акамай! Могу ли я заказать у вас уроки по мудрости ёжика?
 

southside

Client
Регистрация
20.04.2019
Сообщения
198
Благодарностей
250
Баллы
63
обучающим ролик (первый) точно назвать нельзя, просто рабочий процесс и мысли вслух.
Дак у него же в названии роликов есть хэштег #livecoding, что подразумевает специфику видео
Ну и понятно, что подобное не для "совсем" новичком
 

alcampo

Client
Регистрация
06.01.2021
Сообщения
175
Благодарностей
132
Баллы
43
Дак у него же в названии роликов есть хэштег #livecoding, что подразумевает специфику видео
Ну и понятно, что подобное не для "совсем" новичком
Человек хочет за бесплатно чтобы ему разжевали обфускацию ХС кода как это делается на курсах за 150 долларов, на затерянном от мейнстрима форуме по боттингу лол

Может ещё ёжик должен был "javascript с 0 для чайников" добавить в видос как 10и часовое вступление?
 
  • Спасибо
Реакции: southside

SlipDez

Client
Регистрация
18.07.2018
Сообщения
374
Благодарностей
70
Баллы
28
rastvl

Подскажи сложно ли сделать эмуляцию Claudflare на своем сайте или локально используя sitekey и url как это делают такие сервисы как 2captcha для ручного решения и получения cf response
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)