Софт func injector (luaaa)

kizn

\ 0 _ 0 /
Всефорумный модератор
2,407
2,108
как через func injector смотреть обращения, которые делаются через requests
 

asdzxcjqwe

¯\_(ツ)_/¯
Друг
621
709
фиксится простой проверкой кода лол
фиксится твой "фикс" простым перехватом твоих проверок и подменой возвращаемого результата

как через func injector смотреть обращения, которые делаются через requests
совершают запросы разными способами, необязательно все проходит через requests
легче перехватить все имеющиеся функции и ffi
Lua:
local http = require("requests")
local hook = {
    request = http.request
}

http.request = function(method, url, args, ...)
    print("http request", method, url, args, ...)
    return hook.request(method, url, args, ...) -- закомментировать, чтобы не отправлять запрос
end


upd: это расширенный способ для перехвата requests и downloadFile + ответа от сервера
еще хорошо добавить хуки на copas и ffi функции
(не проверено, поэтому ошибки/краши исправить самостоятельно)
Lua (отладка / сбор информации):
local http = require("requests")

local hook = {
    MAX_RESPONSE_OUTLEN = 255,
    downloadUrlToFile = downloadUrlToFile,
    request = http.request
}

function downloadUrlToFile(url, filename, callback)
    local file
    print("downloadUrlToFile", url, filename, callback or "no callback")

    return hook.downloadUrlToFile(url, filename, function(id, state)
        print("downloadUrlToFile", "(callback)", url, filename, id, state)

        if state == 6 then
            repeat
                -- устраняем баг, когда иногда не открывает файл с первого раза
                file = io.open(filename, "rb")
            until file

            local response = file:read("*a")
            file:close()

            print("downloadUrlToFile", "(response)", url, filename)
            print("downloadUrlToFile", "(response data)", response:len() > hook.MAX_RESPONSE_OUTLEN and "(trunc)" or "", response:sub(1, hook.MAX_RESPONSE_OUTLEN))
        end

        callback(id, state)
    end)
end

function http.request(method, url, args)
    print("request", method, url, args or "no args")
    local response = hook.request(method, url, args)
    print("request", "(response)", method, url, args or "no args")
    print("request", "(response text)", response.text:len() > hook.MAX_RESPONSE_OUTLEN and "(trunc)" or "", response.text:sub(1, hook.MAX_RESPONSE_OUTLEN))
    return response
end

Lua (подмена ответа):
local http = require("requests")

local hook = {
    downloadUrlToFile = downloadUrlToFile,
    request = http.request
}

function downloadUrlToFile(url, filename, callback)
    if url:find("auth.php") then
        -- помещаем фейк ответ в файл
        local file = io.open(filename, "wb")
        file:write("your response")
        file:close()

        -- вызываем callback функу со статусом 6, говоря ей, что файл скачался
        return callback(0, 6)

    elseif url:find("sendstats.php") then
        -- не отправляем статистику на сервер
        return false
    end

    -- другие запросы пропускаем, например скачивание картинок
    return hook.downloadUrlToFile(url, filename, callback)
end

function http.request(method, url, args)
    if url:find("login.php") then
        return {
            text = "your response"
        }
    end

    -- не пропускаем другие запросы, поэтому не вызываем оригинальную функу .request
    -- но чтобы не крашило, возвращаем хоть что-то
    return {
        text = ""
    }
end
 
Последнее редактирование:

kizn

\ 0 _ 0 /
Всефорумный модератор
2,407
2,108
фиксится твой "фикс" простым перехватом твоих проверок и подменой возвращаемого результата


совершают запросы разными способами, необязательно все проходит через requests
легче перехватить все имеющиеся функции и ffi
Lua:
local http = require("requests")
local hook = {
    request = http.request
}

http.request = function(method, url, args, ...)
    print("http request", method, url, args, ...)
    return hook.request(method, url, args, ...) -- закомментировать, чтобы не отправлять запрос
end


upd: это расширенный способ для перехвата requests и downloadFile + ответа от сервера
еще хорошо добавить хуки на copas и ffi функции
(не проверено, поэтому ошибки/краши исправить самостоятельно)
Lua (отладка / сбор информации):
local http = require("requests")

local hook = {
    MAX_RESPONSE_OUTLEN = 255,
    downloadUrlToFile = downloadUrlToFile,
    request = http.request
}

function downloadUrlToFile(url, filename, callback)
    local file
    print("downloadUrlToFile", url, filename, callback or "no callback")

    return hook.downloadUrlToFile(url, filename, function(id, state)
        print("downloadUrlToFile", "(callback)", url, filename, id, state)

        if state == 6 then
            repeat
                -- устраняем баг, когда иногда не открывает файл с первого раза
                file = io.open(filename, "rb")
            until file

            local response = file:read("*a")
            file:close()

            print("downloadUrlToFile", "(response)", url, filename)
            print("downloadUrlToFile", "(response data)", response:len() > hook.MAX_RESPONSE_OUTLEN and "(trunc)" or "", response:sub(1, hook.MAX_RESPONSE_OUTLEN))
        end

        callback(id, state)
    end)
end

function http.request(method, url, args)
    print("request", method, url, args or "no args")
    local response = hook.request(method, url, args)
    print("request", "(response)", method, url, args or "no args")
    print("request", "(response text)", response.text:len() > hook.MAX_RESPONSE_OUTLEN and "(trunc)" or "", response.text:sub(1, hook.MAX_RESPONSE_OUTLEN))
    return response
end

Lua (подмена ответа):
local http = require("requests")

local hook = {
    downloadUrlToFile = downloadUrlToFile,
    request = http.request
}

function downloadUrlToFile(url, filename, callback)
    if url:find("auth.php") then
        -- помещаем фейк ответ в файл
        local file = io.open(filename, "wb")
        file:write("your response")
        file:close()

        -- вызываем callback функу со статусом 6, говоря ей, что файл скачался
        return callback(0, 6)

    elseif url:find("sendstats.php") then
        -- не отправляем статистику на сервер
        return false
    end

    -- другие запросы пропускаем, например скачивание картинок
    return hook.downloadUrlToFile(url, filename, callback)
end

function http.request(method, url, args)
    if url:find("login.php") then
        return {
            text = "your response"
        }
    end

    -- не пропускаем другие запросы, поэтому не вызываем оригинальную функу .request
    -- но чтобы не крашило, возвращаем хоть что-то
    return {
        text = ""
    }
end
а как можно подменить ссылку request запроса?
 

asdzxcjqwe

¯\_(ツ)_/¯
Друг
621
709
а как можно подменить ссылку request запроса?
просто же изменить переменную url перед отправкой запроса
Lua (подмена url):
local http = require("requests")
local hook = {
    request = http.request
}

function http.request(method, url, args, ...)
    print("http request", "(original url)", method, url)
    url = url:gsub("serial=(%d+)", "serial=123") -- подменим серийник, если не шифруется в ссылке (для GET)
    args.data.serial = 123 -- для POST (наверное.. точно не уверен)
    url = url:gsub("http://", "https://") -- пустим запросы через https (или наоборот)
    url = url:gsub("license%-server.com", "my-crack-server.net") -- перенаправим запросы на другой сайт
    print("http request", "(new url)", method, url)
    return hook.request(method, url, args, ...)
end