mirror of
https://github.com/rapid7/metasploit-payloads
synced 2024-11-26 17:41:08 +01:00
084eccdef1
This PR contains changes that will force Meterpreter binaries to be outputted to "output" instead of the "output/<arch>" folders. So the gem generation needs to be updated as well so that this new location is used when generating the gem.
123 lines
2.6 KiB
Ruby
123 lines
2.6 KiB
Ruby
require "bundler/gem_tasks"
|
|
require "shell"
|
|
|
|
c_source = "../c/meterpreter/"
|
|
java_source = "../java"
|
|
php_source = "../php/meterpreter/"
|
|
python_source = "../python/meterpreter/"
|
|
dest = "./data"
|
|
meterpreter_dest = "./data/meterpreter"
|
|
|
|
platform_config = {
|
|
:windows => {
|
|
:sources => [
|
|
"../c/meterpreter/output"
|
|
],
|
|
:extensions => [
|
|
"dll"
|
|
]
|
|
},
|
|
:java => {
|
|
:sources => [
|
|
"../java/output/data/meterpreter"
|
|
],
|
|
:extensions => [
|
|
"jar"
|
|
],
|
|
},
|
|
:php => {
|
|
:sources => [
|
|
php_source
|
|
],
|
|
:extensions => [
|
|
"php"
|
|
]
|
|
},
|
|
:python => {
|
|
:sources => [
|
|
python_source
|
|
],
|
|
:extensions => [
|
|
"py"
|
|
]
|
|
}
|
|
}
|
|
|
|
def copy_files(cnf, meterpreter_dest)
|
|
cnf[:sources].each do |f|
|
|
cnf[:extensions].each do |ext|
|
|
Dir.glob("#{f}/*.#{ext}").each do |bin|
|
|
target = File.join(meterpreter_dest, File.basename(bin))
|
|
print("Copying: #{bin} -> #{target}\n")
|
|
FileUtils.cp(bin, target)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
task :create_dir do
|
|
Dir.mkdir(dest) unless Dir.exist?(dest)
|
|
Dir.mkdir(meterpreter_dest) unless Dir.exist?(meterpreter_dest)
|
|
end
|
|
|
|
task :win_compile do
|
|
Dir.chdir(c_source) do
|
|
system('cmd.exe /c make.bat')
|
|
end
|
|
end
|
|
|
|
task :java_compile do
|
|
Dir.chdir(java_source) do
|
|
system('mvn package -Ddeploy.path=output -Dandroid.sdk.path=$ANDROID_HOME -Dandroid.ndk.path=$ANDROID_NDK_HOME -Dandroid.release=true -q -P deploy')
|
|
end
|
|
end
|
|
|
|
task :win_copy do
|
|
copy_files(platform_config[:windows], meterpreter_dest)
|
|
end
|
|
|
|
task :java_copy do
|
|
copy_files(platform_config[:java], meterpreter_dest)
|
|
FileUtils.remove_entry_secure('./java', :force => true)
|
|
FileUtils.cp_r('../java/output/data/android', dest)
|
|
FileUtils.cp_r('../java/output/data/java', dest)
|
|
end
|
|
|
|
task :php_copy do
|
|
copy_files(platform_config[:php], meterpreter_dest)
|
|
end
|
|
|
|
task :python_copy do
|
|
copy_files(platform_config[:python], meterpreter_dest)
|
|
end
|
|
|
|
task :win_prep => [:create_dir, :win_compile, :win_copy] do
|
|
end
|
|
|
|
task :java_prep => [:create_dir, :java_compile, :java_copy] do
|
|
end
|
|
|
|
task :php_prep => [:create_dir, :php_copy] do
|
|
end
|
|
|
|
task :python_prep => [:create_dir, :python_copy] do
|
|
end
|
|
|
|
task :default => [:python_prep, :php_prep, :java_prep] do
|
|
end
|
|
|
|
# Override tag_version in bundler-#.#.#/lib/bundler/gem_helper.rb to force signed tags
|
|
module Bundler
|
|
class GemHelper
|
|
def tag_version
|
|
sh "git tag -m \"Version #{version}\" -s #{version_tag}"
|
|
Bundler.ui.confirm "Tagged #{version_tag}."
|
|
yield if block_given?
|
|
rescue
|
|
Bundler.ui.error "Untagging #{version_tag} due to error."
|
|
sh_with_code "git tag -d #{version_tag}"
|
|
raise
|
|
end
|
|
end
|
|
end
|