pwn 0.5.777 → 0.5.779
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +3 -3
- data/Rakefile +1 -2
- data/build_gem.sh +14 -0
- data/documentation/Installation.md +21 -2
- data/lib/pwn/plugins/repl/mesh.rb +15 -8
- data/lib/pwn/version.rb +1 -1
- data/spec/lib/pwn/module_skills_spec.rb +71 -32
- data/spec/lib/pwn/plugins/repl_mesh_origin_gps_spec.rb +16 -1
- data/third_party/pwn_rdoc.jsonl +0 -23
- metadata +7 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7dd747b247b7c7039df9bba24c9542ecd37b65df6c650b09730ce6b9803d599b
|
|
4
|
+
data.tar.gz: b355d2d146e6b26c833319ac265b76e8fa3fe85892ff53e7c78e1f0238daf067
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6f594c419c8095b788c397b64dcaa417a8efbc3992007b40079f121d93a8dc6ee67b3b41bb5bf48526e55720d99f2fe7cad5ae1fb5a563d71421a866240c4f04
|
|
7
|
+
data.tar.gz: 87e8e462103a8954fd94e9859fbde5e528d1f6803e3dda5abdadbe0e58524a56125fc084747edf0171289b99f84bfcc75d65d5ff4ac10d95d2d44cfe9d002205
|
data/Gemfile
CHANGED
|
@@ -24,7 +24,7 @@ gem 'bundler', '>=4.0.23'
|
|
|
24
24
|
gem 'bundler-audit', '>=0.9.3'
|
|
25
25
|
gem 'bunny', '3.4.0'
|
|
26
26
|
gem 'colorize', '1.1.0'
|
|
27
|
-
gem 'credit_card_validations', '
|
|
27
|
+
gem 'credit_card_validations', '10.0.0'
|
|
28
28
|
gem 'curses', '1.7.0'
|
|
29
29
|
gem 'diffy', '3.4.4'
|
|
30
30
|
gem 'eventmachine', '1.2.7'
|
|
@@ -69,7 +69,7 @@ gem 'packetfu', '2.0.0'
|
|
|
69
69
|
gem 'packetgen', '4.1.1'
|
|
70
70
|
gem 'pdf-reader', '2.16.0'
|
|
71
71
|
gem 'pg', '1.7.0'
|
|
72
|
-
gem 'pry', '0.16.
|
|
72
|
+
gem 'pry', '0.16.1'
|
|
73
73
|
gem 'pry-doc', '1.7.0'
|
|
74
74
|
gem 'rake', '13.4.2'
|
|
75
75
|
gem 'rb-readline', '0.5.5'
|
|
@@ -94,7 +94,7 @@ gem 'selenium-webdriver', '4.51.0'
|
|
|
94
94
|
gem 'slack-ruby-client', '3.3.0'
|
|
95
95
|
gem 'socksify', '1.8.1'
|
|
96
96
|
gem 'spreadsheet', '1.3.5'
|
|
97
|
-
gem 'sqlite3', '2.10.
|
|
97
|
+
gem 'sqlite3', '2.10.1'
|
|
98
98
|
gem 'thin', '2.0.1'
|
|
99
99
|
gem 'tty-prompt', '0.23.1'
|
|
100
100
|
gem 'tty-spinner', '0.9.3'
|
data/Rakefile
CHANGED
|
@@ -38,9 +38,8 @@ default_tasks = %i[spec rubocop]
|
|
|
38
38
|
default_tasks << :rerdoc if defined?(RDoc::Task)
|
|
39
39
|
task default: default_tasks
|
|
40
40
|
|
|
41
|
-
desc 'Regenerate etc/default_skills/pwn from live PWN modules'
|
|
41
|
+
desc 'Regenerate etc/default_skills/pwn from live PWN modules. Not a spec dependency: writing the checkout blocks git merge on upgrade.'
|
|
42
42
|
task :module_skills do
|
|
43
43
|
require 'pwn'
|
|
44
44
|
PWN::ModuleSkills.refresh!
|
|
45
45
|
end
|
|
46
|
-
Rake::Task[:spec].enhance([:module_skills])
|
data/build_gem.sh
CHANGED
|
@@ -19,6 +19,20 @@ git config pull.rebase false
|
|
|
19
19
|
# Sync fork with upstream to avoid merge conflicts and ensure we are building the latest codebase
|
|
20
20
|
git remote -v | grep 'upstream' || git remote add upstream https://github.com/0dayinc/pwn.git
|
|
21
21
|
git fetch upstream
|
|
22
|
+
# Preserve legacy generated-skill changes before switching branches or merging.
|
|
23
|
+
# Leave the stash saved: popping it would recreate the next upgrade conflict.
|
|
24
|
+
generated_skills=()
|
|
25
|
+
while IFS= read -r skill; do
|
|
26
|
+
[[ -f "$skill" ]] || continue
|
|
27
|
+
[[ "$skill" == */SKILL.md ]] || continue
|
|
28
|
+
grep -Eq '^[[:space:]]*generated:[[:space:]]*true[[:space:]]*$' "$skill" || continue
|
|
29
|
+
grep -Eq '^[[:space:]]*preserve:[[:space:]]*true[[:space:]]*$' "$skill" && continue
|
|
30
|
+
generated_skills+=("$skill")
|
|
31
|
+
done < <(git diff --name-only HEAD -- etc/default_skills/pwn)
|
|
32
|
+
if (( ${#generated_skills[@]} )); then
|
|
33
|
+
git stash push -m 'pwn upgrade: saved generated module skills' -- "${generated_skills[@]}"
|
|
34
|
+
printf '%s\n' 'Generated skill edits saved in git stash; not reapplied after upgrade.'
|
|
35
|
+
fi
|
|
22
36
|
git checkout master
|
|
23
37
|
git merge upstream/master
|
|
24
38
|
git pull
|
|
@@ -381,8 +381,27 @@ edited SOP `SKILL.md`). Generated module skills under `etc/default_skills/pwn/`
|
|
|
381
381
|
`PWN::` module, plus `references/` when the source has CWE/NIST/URLs) are
|
|
382
382
|
copied to `~/.pwn/skills/pwn/` and **are** overwritten on
|
|
383
383
|
`pwn setup --migrate` / first launch so they stay in sync with `lib/pwn`.
|
|
384
|
-
`bundle exec rake`
|
|
385
|
-
|
|
384
|
+
`bundle exec rake` does not rewrite `etc/default_skills/pwn`. `rake module_skills`
|
|
385
|
+
is the explicit regenerate. A spec or rake run that writes the checkout
|
|
386
|
+
leaves a local `SKILL.md` edit, and the next `upgrade_pwn.sh` merge aborts.
|
|
387
|
+
The upgrade saves modified generated module `SKILL.md` files in a named Git
|
|
388
|
+
stash before merging; it does not automatically reapply those stale files.
|
|
389
|
+
Skills marked `preserve: true` and unrelated edits are left alone.
|
|
390
|
+
|
|
391
|
+
For a clone already blocked before it can obtain this fix, no reclone is needed:
|
|
392
|
+
|
|
393
|
+
```bash
|
|
394
|
+
cd /opt/pwn
|
|
395
|
+
git stash push -m 'pwn: preserve legacy generated skills before upgrade' -- etc/default_skills/pwn
|
|
396
|
+
./upgrade_pwn.sh
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
The stash preserves the prior skill edits for review with `git stash list` and
|
|
400
|
+
`git stash show -p`. Do not blindly pop it after upgrading: that restores stale
|
|
401
|
+
generated files and can recreate the conflict. The one-time command saves all
|
|
402
|
+
edits under that skill subtree, including any hand-edited skills; recover those
|
|
403
|
+
selectively after reviewing them. Other local changes are not stashed.
|
|
404
|
+
|
|
386
405
|
`pwn setup --migrate` and `pwn-ai` start copy that tree to `~/.pwn/skills/pwn`. Add at least one
|
|
387
406
|
LLM engine key with the `pwn-vault` REPL command to enable `pwn-ai` - see
|
|
388
407
|
[Configuration](Configuration.md). `pwn setup` will report the AI-engine
|
|
@@ -2624,9 +2624,9 @@ class << PWN::Plugins::REPL # rubocop:disable Metrics/ClassLength
|
|
|
2624
2624
|
value = opts[:value].to_s
|
|
2625
2625
|
value = '—' if value.empty?
|
|
2626
2626
|
prefix = "#{opts[:label]}: "
|
|
2627
|
-
return [{ text: "#{prefix}#{value}" }] if Unicode::DisplayWidth.of("#{prefix}#{value}") <= width
|
|
2627
|
+
return [{ text: "#{prefix}#{value}", label: prefix.rstrip }] if Unicode::DisplayWidth.of("#{prefix}#{value}") <= width
|
|
2628
2628
|
|
|
2629
|
-
[{ text: prefix.rstrip }].concat(mesh_wrap_text(text: value, width: width).map { |line| { text: line } })
|
|
2629
|
+
[{ text: prefix.rstrip, label: prefix.rstrip }].concat(mesh_wrap_text(text: value, width: width).map { |line| { text: line } })
|
|
2630
2630
|
end
|
|
2631
2631
|
|
|
2632
2632
|
def mesh_gps_labeled_rows(opts = {})
|
|
@@ -2637,9 +2637,9 @@ class << PWN::Plugins::REPL # rubocop:disable Metrics/ClassLength
|
|
|
2637
2637
|
coord, url = label.split(' >> ', 2)
|
|
2638
2638
|
prefix = 'GPS: '
|
|
2639
2639
|
if Unicode::DisplayWidth.of("#{prefix}#{coord}") <= width
|
|
2640
|
-
[{ text: "#{prefix}#{coord}", link: true, link_at: prefix.length, url: url }]
|
|
2640
|
+
[{ text: "#{prefix}#{coord}", label: 'GPS:', link: true, link_at: prefix.length, url: url }]
|
|
2641
2641
|
else
|
|
2642
|
-
[{ text: 'GPS:' }, { text: coord, link: true, url: url }]
|
|
2642
|
+
[{ text: 'GPS:', label: 'GPS:' }, { text: coord, link: true, url: url }]
|
|
2643
2643
|
end
|
|
2644
2644
|
end
|
|
2645
2645
|
|
|
@@ -2964,7 +2964,12 @@ class << PWN::Plugins::REPL # rubocop:disable Metrics/ClassLength
|
|
|
2964
2964
|
at = line[:link_at].to_i
|
|
2965
2965
|
prefix = text[0, at].to_s
|
|
2966
2966
|
coord = text[at..] || ''
|
|
2967
|
-
|
|
2967
|
+
unless prefix.empty?
|
|
2968
|
+
win.attron(Curses.color_pair(24) | Curses::A_BOLD)
|
|
2969
|
+
win.addstr(prefix.rstrip)
|
|
2970
|
+
win.attroff(Curses.color_pair(24) | Curses::A_BOLD)
|
|
2971
|
+
win.addstr(prefix[prefix.rstrip.length..])
|
|
2972
|
+
end
|
|
2968
2973
|
win.attron(Curses::A_UNDERLINE)
|
|
2969
2974
|
win.addstr(coord)
|
|
2970
2975
|
win.attroff(Curses::A_UNDERLINE)
|
|
@@ -2973,9 +2978,11 @@ class << PWN::Plugins::REPL # rubocop:disable Metrics/ClassLength
|
|
|
2973
2978
|
hit[:pane] = opts[:pane]
|
|
2974
2979
|
opts[:hits] << hit
|
|
2975
2980
|
elsif line[:label] && win.respond_to?(:attron)
|
|
2976
|
-
|
|
2977
|
-
win.
|
|
2978
|
-
win.
|
|
2981
|
+
label = text[0, line[:label].to_s.length]
|
|
2982
|
+
win.attron(Curses.color_pair(24) | Curses::A_BOLD)
|
|
2983
|
+
win.addstr(label)
|
|
2984
|
+
win.attroff(Curses.color_pair(24) | Curses::A_BOLD)
|
|
2985
|
+
win.addstr(text[label.length..].to_s)
|
|
2979
2986
|
else
|
|
2980
2987
|
win.addstr(text)
|
|
2981
2988
|
end
|
data/lib/pwn/version.rb
CHANGED
|
@@ -3,8 +3,46 @@
|
|
|
3
3
|
require 'spec_helper'
|
|
4
4
|
require 'fileutils'
|
|
5
5
|
require 'tmpdir'
|
|
6
|
+
require 'open3'
|
|
6
7
|
|
|
7
8
|
describe PWN::ModuleSkills do
|
|
9
|
+
it 'saves legacy generated edits and merges without discarding unrelated edits' do
|
|
10
|
+
script = File.read(File.expand_path('../../../build_gem.sh', __dir__))
|
|
11
|
+
recovery = script.split('generated_skills=()', 2).last.split('git checkout master', 2).first
|
|
12
|
+
Dir.mktmpdir('pwn_upgrade') do |dir|
|
|
13
|
+
git = lambda do |*args|
|
|
14
|
+
out, status = Open3.capture2e('git', *args, chdir: dir)
|
|
15
|
+
expect(status.success?).to be(true), out
|
|
16
|
+
out
|
|
17
|
+
end
|
|
18
|
+
git.call('init', '-b', 'master')
|
|
19
|
+
git.call('config', 'user.email', 'test@example.invalid')
|
|
20
|
+
git.call('config', 'user.name', 'Upgrade Test')
|
|
21
|
+
skill = 'etc/default_skills/pwn/json_text/SKILL.md'
|
|
22
|
+
path = File.join(dir, skill)
|
|
23
|
+
FileUtils.mkdir_p(File.dirname(path))
|
|
24
|
+
original = "---\ngenerated: true\n---\noriginal\n"
|
|
25
|
+
File.write(path, original)
|
|
26
|
+
File.write(File.join(dir, 'notes'), 'original')
|
|
27
|
+
git.call('add', '.')
|
|
28
|
+
git.call('commit', '-m', 'base')
|
|
29
|
+
git.call('checkout', '-b', 'incoming')
|
|
30
|
+
File.write(path, "#{original}upstream\n")
|
|
31
|
+
git.call('commit', '-am', 'update')
|
|
32
|
+
git.call('checkout', 'master')
|
|
33
|
+
File.write(path, "#{original}local regeneration\n")
|
|
34
|
+
File.write(File.join(dir, 'notes'), 'keep my edit')
|
|
35
|
+
_, blocked = Open3.capture2e('git', 'merge', '--ff-only', 'incoming', chdir: dir)
|
|
36
|
+
expect(blocked.success?).to be(false)
|
|
37
|
+
out, status = Open3.capture2e('bash', '-ec', "generated_skills=()#{recovery}", chdir: dir)
|
|
38
|
+
expect(status.success?).to be(true), out
|
|
39
|
+
git.call('merge', '--ff-only', 'incoming')
|
|
40
|
+
expect(File.read(path)).to eq("#{original}upstream\n")
|
|
41
|
+
expect(File.read(File.join(dir, 'notes'))).to eq('keep my edit')
|
|
42
|
+
expect(git.call('show', "stash@{0}:#{skill}")).to include('local regeneration')
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
8
46
|
it 'should display information for authors' do
|
|
9
47
|
expect(described_class).to respond_to :authors
|
|
10
48
|
end
|
|
@@ -23,48 +61,50 @@ describe PWN::ModuleSkills do
|
|
|
23
61
|
expect(described_class.relpath(source: 'pwn.rb')).to eq('pwn/SKILL.md')
|
|
24
62
|
end
|
|
25
63
|
|
|
26
|
-
it 'refreshes
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
64
|
+
it 'refreshes a temp skill tree and does not rewrite the checkout' do
|
|
65
|
+
checkout = File.join(PWN::ModuleSkills::GEM_SKILLS, 'json_text', 'SKILL.md')
|
|
66
|
+
before = File.read(checkout)
|
|
67
|
+
Dir.mktmpdir('pwn_mod_refresh') do |dir|
|
|
68
|
+
report = described_class.refresh!(dest: dir)
|
|
69
|
+
expect(report[:modules]).to be > 50
|
|
70
|
+
tb = File.join(dir, 'pwn', 'plugins', 'transparent_browser', 'SKILL.md')
|
|
71
|
+
expect(File.file?(tb)).to eq(true), tb
|
|
72
|
+
expect(File).not_to exist(File.join(dir, 'pwn', 'plugins', 'transparent_browser.md'))
|
|
73
|
+
body = File.read(tb)
|
|
74
|
+
expect(body).to include('PWN::Plugins::TransparentBrowser')
|
|
75
|
+
expect(body).to include('open')
|
|
76
|
+
expect(body).not_to match(/hermes/i)
|
|
36
77
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
78
|
+
pw = File.join(dir, 'pwn', 'sast', 'password', 'SKILL.md')
|
|
79
|
+
expect(File.file?(pw)).to eq(true), pw
|
|
80
|
+
expect(File.file?(File.join(dir, 'pwn', 'sast', 'password', 'references', 'security.md'))).to eq(true)
|
|
81
|
+
|
|
82
|
+
described_class.enumerate.each do |rec|
|
|
83
|
+
path = File.join(dir, described_class.relpath(source: rec[:source], const: rec[:const]))
|
|
84
|
+
expect(File.file?(path)).to eq(true), path
|
|
85
|
+
expect(File.read(path)).to include(rec[:const])
|
|
86
|
+
expect(File.read(path)).not_to match(/hermes/i)
|
|
87
|
+
end
|
|
88
|
+
drift = described_class.drift(dest: dir)
|
|
89
|
+
expect(drift[:missing]).to eq([])
|
|
90
|
+
expect(drift[:stale]).to eq([])
|
|
91
|
+
expect(drift[:orphans]).to eq([])
|
|
92
|
+
end
|
|
93
|
+
expect(File.read(checkout)).to eq(before)
|
|
40
94
|
|
|
41
95
|
gw = File.join(PWN::ModuleSkills::GEM_SKILLS, 'plugins', 'google_workspace', 'SKILL.md')
|
|
42
96
|
expect(File.read(gw)).to include('preserve: true')
|
|
43
97
|
expect(File.read(gw)).to include('gmail_search')
|
|
44
98
|
expect(File.read(gw)).to include('daily-brief.md')
|
|
45
99
|
expect(File).not_to exist(File.join(PWN::Config.default_skills_dir, 'productivity', 'google-workspace', 'SKILL.md'))
|
|
46
|
-
|
|
47
|
-
described_class.enumerate.each do |rec|
|
|
48
|
-
path = File.join(
|
|
49
|
-
File.dirname(PWN::ModuleSkills::GEM_SKILLS),
|
|
50
|
-
described_class.relpath(source: rec[:source], const: rec[:const])
|
|
51
|
-
)
|
|
52
|
-
expect(File.file?(path)).to eq(true), path
|
|
53
|
-
expect(File.read(path)).to include(rec[:const])
|
|
54
|
-
expect(File.read(path)).not_to match(/hermes/i)
|
|
55
|
-
end
|
|
56
|
-
drift = described_class.drift
|
|
57
|
-
expect(drift[:missing]).to eq([])
|
|
58
|
-
expect(drift[:stale]).to eq([])
|
|
59
|
-
expect(drift[:orphans]).to eq([])
|
|
60
100
|
end
|
|
61
101
|
|
|
62
|
-
it '
|
|
63
|
-
expect(described_class).to respond_to(:drift)
|
|
102
|
+
it 'does not rewrite the checkout before spec' do
|
|
64
103
|
rake = File.read(File.expand_path('../../../Rakefile', __dir__))
|
|
65
|
-
expect(rake).to match(/module_skills/)
|
|
104
|
+
expect(rake).to match(/task :module_skills do/)
|
|
66
105
|
expect(rake).to match(/ModuleSkills\.refresh!/)
|
|
67
|
-
expect(rake).
|
|
106
|
+
expect(rake).not_to match(/Task\[:spec\]\.enhance\(\[:module_skills\]\)/)
|
|
107
|
+
expect(rake).not_to match(/module_skills_drift/)
|
|
68
108
|
end
|
|
69
109
|
|
|
70
110
|
it 'install overwrites existing generated module skills' do
|
|
@@ -83,7 +123,6 @@ describe PWN::ModuleSkills do
|
|
|
83
123
|
end
|
|
84
124
|
|
|
85
125
|
it 'ships no credential-shaped artifacts under etc/default_skills' do
|
|
86
|
-
described_class.refresh!
|
|
87
126
|
rx = described_class.const_get(:ARTIFACT_RX)
|
|
88
127
|
leftovers = []
|
|
89
128
|
Dir.glob(File.join(PWN::Config.default_skills_dir, '**', '*')).each do |path|
|
|
@@ -4,6 +4,21 @@ require 'spec_helper'
|
|
|
4
4
|
require 'meshtastic'
|
|
5
5
|
|
|
6
6
|
describe PWN::Plugins::REPL, 'mesh primary display, MQTT sender, and GPS link' do
|
|
7
|
+
it 'paints field labels bold white without changing value attributes' do
|
|
8
|
+
attrs = 0
|
|
9
|
+
painted = []
|
|
10
|
+
allow(Curses).to receive(:color_pair).with(20).and_return(0)
|
|
11
|
+
allow(Curses).to receive(:color_pair).with(24).and_return(256)
|
|
12
|
+
allow(details).to receive(:attron) { |value| attrs |= value }
|
|
13
|
+
allow(details).to receive(:attroff) { |value| attrs &= ~value }
|
|
14
|
+
allow(details).to receive(:addstr) { |text| painted << [text, attrs] }
|
|
15
|
+
rows = described_class.send(:mesh_value_rows, label: 'Node ID', value: '!00001337', width: 28)
|
|
16
|
+
rows += described_class.send(:mesh_value_rows, label: 'GPS', value: 'N/A', width: 28)
|
|
17
|
+
described_class.send(:mesh_paint_side, win: details, title: 'SENDER', focus: :sndr, rows: rows, hits: [])
|
|
18
|
+
expect(painted).to include(['Node ID:', 256 | Curses::A_BOLD], ['GPS:', 256 | Curses::A_BOLD])
|
|
19
|
+
expect(painted).to include([' !00001337', 0], [' N/A', 0])
|
|
20
|
+
end
|
|
21
|
+
|
|
7
22
|
let(:env) do
|
|
8
23
|
{ transport: 'serial', mqtt: { host: 'offline.invalid', region: 'US' },
|
|
9
24
|
channel: { active: 'LongFast', LongFast: { psk: 'AQ==', region: 'US', topic: '2/e/LongFast/#', from: '!00001337' } } }
|
|
@@ -224,7 +239,7 @@ describe PWN::Plugins::REPL, 'mesh primary display, MQTT sender, and GPS link' d
|
|
|
224
239
|
colors = []
|
|
225
240
|
allow(details).to receive(:attron) { |attr| colors << attr }
|
|
226
241
|
described_class.send(:mesh_handle_rx, env: env, obj: radio, msg: { packet: packet, mesh_transport: :serial })
|
|
227
|
-
painted = details.lines.join
|
|
242
|
+
painted = details.lines.join
|
|
228
243
|
expect(painted).to include('SENDER', 'Node ID: !421f6f22', 'GPS:')
|
|
229
244
|
expect(painted).not_to include('VIA')
|
|
230
245
|
node_num = 0x421f6f22
|
data/third_party/pwn_rdoc.jsonl
CHANGED
|
@@ -3397,18 +3397,6 @@
|
|
|
3397
3397
|
{"messages":[{"role":"user","content":"PWN::Plugins::REDB.strings Usage"},{"role":"assistant","content":"`PWN::Plugins::REDB.strings`: "}]}
|
|
3398
3398
|
{"messages":[{"role":"user","content":"PWN::Plugins::REDB.with_db Usage"},{"role":"assistant","content":"`PWN::Plugins::REDB.with_db`: "}]}
|
|
3399
3399
|
{"messages":[{"role":"user","content":"PWN::Plugins::REDB.xrefs_to Usage"},{"role":"assistant","content":"`PWN::Plugins::REDB.xrefs_to`: "}]}
|
|
3400
|
-
{"messages":[{"role":"user","content":"PWN::Plugins::REPL.add_commands Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.add_commands`: Supported Method Parameters\n\nPWN::Plugins::REPL.add_commands\n"}]}
|
|
3401
|
-
{"messages":[{"role":"user","content":"PWN::Plugins::REPL.add_hooks Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.add_hooks`: Supported Method Parameters\n\nPWN::Plugins::REPL.add_hooks\n"}]}
|
|
3402
|
-
{"messages":[{"role":"user","content":"PWN::Plugins::REPL.authors Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
3403
|
-
{"messages":[{"role":"user","content":"PWN::Plugins::REPL.compact_context_tokens Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.compact_context_tokens`: "}]}
|
|
3404
|
-
{"messages":[{"role":"user","content":"PWN::Plugins::REPL.enable_autocomplete Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.enable_autocomplete`: "}]}
|
|
3405
|
-
{"messages":[{"role":"user","content":"PWN::Plugins::REPL.help Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.help`: "}]}
|
|
3406
|
-
{"messages":[{"role":"user","content":"PWN::Plugins::REPL.leave_special_mode! Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.leave_special_mode!`: "}]}
|
|
3407
|
-
{"messages":[{"role":"user","content":"PWN::Plugins::REPL.ready_tty! Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.ready_tty!`: "}]}
|
|
3408
|
-
{"messages":[{"role":"user","content":"PWN::Plugins::REPL.refresh_ps1_proc Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.refresh_ps1_proc`: "}]}
|
|
3409
|
-
{"messages":[{"role":"user","content":"PWN::Plugins::REPL.reset_reline_editor Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.reset_reline_editor`: "}]}
|
|
3410
|
-
{"messages":[{"role":"user","content":"PWN::Plugins::REPL.start Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.start`: Supported Method Parameters\n\nPWN::Plugins::REPL.start\n"}]}
|
|
3411
|
-
{"messages":[{"role":"user","content":"PWN::Plugins::REPL.process Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL.process`: "}]}
|
|
3412
3400
|
{"messages":[{"role":"user","content":"PWN::Plugins::REPL::AI.add_commands Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::AI.add_commands`: "}]}
|
|
3413
3401
|
{"messages":[{"role":"user","content":"PWN::Plugins::REPL::AI.authors Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::AI.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
3414
3402
|
{"messages":[{"role":"user","content":"PWN::Plugins::REPL::AI.help Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::AI.help`: "}]}
|
|
@@ -3677,13 +3665,6 @@
|
|
|
3677
3665
|
{"messages":[{"role":"user","content":"PWN::Plugins::REPL::Mesh.authors Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::Mesh.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
3678
3666
|
{"messages":[{"role":"user","content":"PWN::Plugins::REPL::Mesh.help Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::Mesh.help`: "}]}
|
|
3679
3667
|
{"messages":[{"role":"user","content":"PWN::Plugins::REPL::Mesh.process Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::Mesh.process`: "}]}
|
|
3680
|
-
{"messages":[{"role":"user","content":"PWN::Plugins::REPL::Mesh::PWN::Plugins::REPL.install_pwn_mesh_completer! Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::Mesh::PWN::Plugins::REPL.install_pwn_mesh_completer!`: "}]}
|
|
3681
|
-
{"messages":[{"role":"user","content":"PWN::Plugins::REPL::Mesh::PWN::Plugins::REPL.mesh_menu_pick Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::Mesh::PWN::Plugins::REPL.mesh_menu_pick`: "}]}
|
|
3682
|
-
{"messages":[{"role":"user","content":"PWN::Plugins::REPL::Mesh::PWN::Plugins::REPL.mesh_reset_input! Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::Mesh::PWN::Plugins::REPL.mesh_reset_input!`: "}]}
|
|
3683
|
-
{"messages":[{"role":"user","content":"PWN::Plugins::REPL::Mesh::PWN::Plugins::REPL.persist_mesh_env Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::Mesh::PWN::Plugins::REPL.persist_mesh_env`: "}]}
|
|
3684
|
-
{"messages":[{"role":"user","content":"PWN::Plugins::REPL::Mesh::PWN::Plugins::REPL.pwn_mesh_complete Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::Mesh::PWN::Plugins::REPL.pwn_mesh_complete`: "}]}
|
|
3685
|
-
{"messages":[{"role":"user","content":"PWN::Plugins::REPL::Mesh::PWN::Plugins::REPL.pwn_mesh_dispatch_slash! Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::Mesh::PWN::Plugins::REPL.pwn_mesh_dispatch_slash!`: "}]}
|
|
3686
|
-
{"messages":[{"role":"user","content":"PWN::Plugins::REPL::Mesh::PWN::Plugins::REPL.pwn_mesh_menu_rows Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::Mesh::PWN::Plugins::REPL.pwn_mesh_menu_rows`: "}]}
|
|
3687
3668
|
{"messages":[{"role":"user","content":"PWN::Plugins::REPL::PWNMultiLineInput.new Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::PWNMultiLineInput.new`: "}]}
|
|
3688
3669
|
{"messages":[{"role":"user","content":"PWN::Plugins::REPL::PWNMultiLineInput.ensure_tmux_extended_keys Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::PWNMultiLineInput.ensure_tmux_extended_keys`: "}]}
|
|
3689
3670
|
{"messages":[{"role":"user","content":"PWN::Plugins::REPL::PWNMultiLineInput.ensure_vte_shift_enter Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::PWNMultiLineInput.ensure_vte_shift_enter`: "}]}
|
|
@@ -3692,10 +3673,6 @@
|
|
|
3692
3673
|
{"messages":[{"role":"user","content":"PWN::Plugins::REPL::PWNMultiLineInput.reline_config Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::PWNMultiLineInput.reline_config`: "}]}
|
|
3693
3674
|
{"messages":[{"role":"user","content":"PWN::Plugins::REPL::PWNMultiLineInput.tty? Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::PWNMultiLineInput.tty?`: "}]}
|
|
3694
3675
|
{"messages":[{"role":"user","content":"PWN::Plugins::REPL::PWNMultiLineInput.winsize Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::PWNMultiLineInput.winsize`: "}]}
|
|
3695
|
-
{"messages":[{"role":"user","content":"PWN::Plugins::REPL::Vault.add_commands Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::Vault.add_commands`: "}]}
|
|
3696
|
-
{"messages":[{"role":"user","content":"PWN::Plugins::REPL::Vault.authors Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::Vault.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
3697
|
-
{"messages":[{"role":"user","content":"PWN::Plugins::REPL::Vault.help Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::Vault.help`: "}]}
|
|
3698
|
-
{"messages":[{"role":"user","content":"PWN::Plugins::REPL::Vault.process Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::Vault.process`: "}]}
|
|
3699
3676
|
{"messages":[{"role":"user","content":"PWN::Plugins::ROP.annotate Usage"},{"role":"assistant","content":"`PWN::Plugins::ROP.annotate`: "}]}
|
|
3700
3677
|
{"messages":[{"role":"user","content":"PWN::Plugins::ROP.authors Usage"},{"role":"assistant","content":"`PWN::Plugins::ROP.authors`: "}]}
|
|
3701
3678
|
{"messages":[{"role":"user","content":"PWN::Plugins::ROP.canonical_register Usage"},{"role":"assistant","content":"`PWN::Plugins::ROP.canonical_register`: "}]}
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: pwn
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.5.
|
|
4
|
+
version: 0.5.779
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- 0day Inc.
|
|
@@ -197,14 +197,14 @@ dependencies:
|
|
|
197
197
|
requirements:
|
|
198
198
|
- - '='
|
|
199
199
|
- !ruby/object:Gem::Version
|
|
200
|
-
version:
|
|
200
|
+
version: 10.0.0
|
|
201
201
|
type: :runtime
|
|
202
202
|
prerelease: false
|
|
203
203
|
version_requirements: !ruby/object:Gem::Requirement
|
|
204
204
|
requirements:
|
|
205
205
|
- - '='
|
|
206
206
|
- !ruby/object:Gem::Version
|
|
207
|
-
version:
|
|
207
|
+
version: 10.0.0
|
|
208
208
|
- !ruby/object:Gem::Dependency
|
|
209
209
|
name: curses
|
|
210
210
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -785,14 +785,14 @@ dependencies:
|
|
|
785
785
|
requirements:
|
|
786
786
|
- - '='
|
|
787
787
|
- !ruby/object:Gem::Version
|
|
788
|
-
version: 0.16.
|
|
788
|
+
version: 0.16.1
|
|
789
789
|
type: :runtime
|
|
790
790
|
prerelease: false
|
|
791
791
|
version_requirements: !ruby/object:Gem::Requirement
|
|
792
792
|
requirements:
|
|
793
793
|
- - '='
|
|
794
794
|
- !ruby/object:Gem::Version
|
|
795
|
-
version: 0.16.
|
|
795
|
+
version: 0.16.1
|
|
796
796
|
- !ruby/object:Gem::Dependency
|
|
797
797
|
name: pry-doc
|
|
798
798
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -1121,14 +1121,14 @@ dependencies:
|
|
|
1121
1121
|
requirements:
|
|
1122
1122
|
- - '='
|
|
1123
1123
|
- !ruby/object:Gem::Version
|
|
1124
|
-
version: 2.10.
|
|
1124
|
+
version: 2.10.1
|
|
1125
1125
|
type: :development
|
|
1126
1126
|
prerelease: false
|
|
1127
1127
|
version_requirements: !ruby/object:Gem::Requirement
|
|
1128
1128
|
requirements:
|
|
1129
1129
|
- - '='
|
|
1130
1130
|
- !ruby/object:Gem::Version
|
|
1131
|
-
version: 2.10.
|
|
1131
|
+
version: 2.10.1
|
|
1132
1132
|
- !ruby/object:Gem::Dependency
|
|
1133
1133
|
name: thin
|
|
1134
1134
|
requirement: !ruby/object:Gem::Requirement
|