ruby_apk 0.5.0 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +6 -1
- data/README.md +4 -2
- data/VERSION +1 -1
- data/lib/android/axml_parser.rb +1 -1
- data/lib/android/manifest.rb +13 -0
- data/ruby_apk.gemspec +3 -3
- data/spec/manifest_spec.rb +14 -1
- metadata +4 -4
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
# ChangeLog
|
2
|
+
## 0.5.1
|
3
|
+
* [#8] ass Android::Manifest#label
|
4
|
+
* [#7] fix wrong boolean value in manifest parser
|
5
|
+
* [#6] add accessor Android::Manifest#doc
|
6
|
+
|
2
7
|
## 0.5.0
|
3
|
-
* implement Android::Resource#find, #res_readable_id, #res_hex_id methods
|
8
|
+
* [issue #1] implement Android::Resource#find, #res_readable_id, #res_hex_id methods
|
4
9
|
|
5
10
|
## 0.4.2
|
6
11
|
* fix bugs(#2, #3)
|
data/README.md
CHANGED
@@ -77,6 +77,8 @@ This feature supports only srting resources for now.
|
|
77
77
|
|
78
78
|
```ruby
|
79
79
|
apk = Android::Apk.new('sample.apk')
|
80
|
+
rsc = apk.resource
|
81
|
+
|
80
82
|
# assigns readable resource id
|
81
83
|
puts rsc.find('@string/app_name') # => 'application name'
|
82
84
|
|
@@ -94,12 +96,12 @@ This feature supports only srting resources for now.
|
|
94
96
|
apk = Android::Apk.new('sample.apk')
|
95
97
|
dex = apk.dex
|
96
98
|
# listing string table in dex
|
97
|
-
dex.strings do |str|
|
99
|
+
dex.strings.each do |str|
|
98
100
|
puts str
|
99
101
|
end
|
100
102
|
|
101
103
|
# listing all class names
|
102
|
-
dex.classes do |cls| # cls is Android::Dex::ClassInfo
|
104
|
+
dex.classes.each do |cls| # cls is Android::Dex::ClassInfo
|
103
105
|
puts "class: #{cls.name}"
|
104
106
|
cls.virtual_methods.each do |m| # Android::Dex::MethodInfo
|
105
107
|
puts "\t#{m.definition}" # puts method definition
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.1
|
data/lib/android/axml_parser.rb
CHANGED
@@ -167,7 +167,7 @@ module Android
|
|
167
167
|
when VAL_TYPE_INT_HEX
|
168
168
|
value = "%#x" % val
|
169
169
|
when VAL_TYPE_INT_BOOLEAN
|
170
|
-
value = val !=
|
170
|
+
value = ((val != 0xFFFFFFFF) || (val==1)) ? true : false
|
171
171
|
else
|
172
172
|
value = "[%#x, flag=%#x]" % [val, flags]
|
173
173
|
end
|
data/lib/android/manifest.rb
CHANGED
@@ -28,11 +28,15 @@ module Android
|
|
28
28
|
attr_reader :intent_filters
|
29
29
|
# @return [Array<Manifest::Meta>]
|
30
30
|
attr_reader :metas
|
31
|
+
# @return [REXML::Element]
|
32
|
+
attr_reader :elem
|
33
|
+
|
31
34
|
|
32
35
|
# @param [REXML::Element] elem target element
|
33
36
|
# @raise [ArgumentError] when elem is invalid.
|
34
37
|
def initialize(elem)
|
35
38
|
raise ArgumentError unless Component.valid?(elem)
|
39
|
+
@elem = elem
|
36
40
|
@type = elem.name
|
37
41
|
@name = elem.attributes['name']
|
38
42
|
@intent_filters = []
|
@@ -144,6 +148,9 @@ module Android
|
|
144
148
|
#################################
|
145
149
|
# Manifest class definitions
|
146
150
|
#################################
|
151
|
+
#
|
152
|
+
# @return [REXML::Document] manifest xml
|
153
|
+
attr_reader :doc
|
147
154
|
|
148
155
|
# @param [String] data binary data of AndroidManifest.xml
|
149
156
|
def initialize(data)
|
@@ -197,6 +204,12 @@ module Android
|
|
197
204
|
@doc.elements['/manifest/uses-sdk'].attributes['minSdkVersion'].to_i
|
198
205
|
end
|
199
206
|
|
207
|
+
# application label
|
208
|
+
# @return [String] application label string or resource id (like @0x7f04001)
|
209
|
+
def label
|
210
|
+
@doc.elements['/manifest/application'].attributes['label']
|
211
|
+
end
|
212
|
+
|
200
213
|
# return xml as string format
|
201
214
|
# @param [Integer] indent size(bytes)
|
202
215
|
# @return [String] raw xml string
|
data/ruby_apk.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "ruby_apk"
|
8
|
-
s.version = "0.5.
|
8
|
+
s.version = "0.5.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["SecureBrain"]
|
12
|
-
s.date = "2013-01
|
12
|
+
s.date = "2013-05-01"
|
13
13
|
s.description = "static analysis tool for android apk"
|
14
14
|
s.email = "info@securebrain.co.jp"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -59,7 +59,7 @@ Gem::Specification.new do |s|
|
|
59
59
|
s.homepage = "https://github.com/SecureBrain/ruby_apk/"
|
60
60
|
s.licenses = ["MIT"]
|
61
61
|
s.require_paths = ["lib"]
|
62
|
-
s.rubygems_version = "1.8.
|
62
|
+
s.rubygems_version = "1.8.25"
|
63
63
|
s.summary = "static analysis tool for android apk"
|
64
64
|
|
65
65
|
if s.respond_to? :specification_version then
|
data/spec/manifest_spec.rb
CHANGED
@@ -33,6 +33,11 @@ describe Android::Manifest do
|
|
33
33
|
it { should have(2).item }
|
34
34
|
end
|
35
35
|
end
|
36
|
+
describe '#elem' do
|
37
|
+
subject { Android::Manifest::Component.new(elem).elem }
|
38
|
+
let(:elem) { REXML::Element.new('service') }
|
39
|
+
it { should eq elem }
|
40
|
+
end
|
36
41
|
|
37
42
|
describe Android::Manifest::Meta do
|
38
43
|
let(:elem) do
|
@@ -168,13 +173,21 @@ describe Android::Manifest do
|
|
168
173
|
subject { manifest.min_sdk_ver}
|
169
174
|
it { should == 10 }
|
170
175
|
end
|
176
|
+
describe "#label" do
|
177
|
+
subject { manifest.label }
|
178
|
+
it { should == "@0x7f040001" }
|
179
|
+
end
|
180
|
+
describe "#doc" do
|
181
|
+
subject { manifest.doc }
|
182
|
+
it { should be_instance_of REXML::Document }
|
183
|
+
end
|
171
184
|
describe "#to_xml" do
|
172
185
|
let(:raw_xml){ str = <<EOS
|
173
186
|
<manifest xmlns:android='http://schemas.android.com/apk/res/android' android:versionCode='101' android:versionName='1.0.1-malware2' package='example.app.sample'>
|
174
187
|
<uses-sdk android:minSdkVersion='10'/>
|
175
188
|
<uses-permission android:name='android.permission.INTERNET'/>
|
176
189
|
<uses-permission android:name='android.permission.WRITE_EXTERNAL_STORAGE'/>
|
177
|
-
<application android:label='@0x7f040001' android:icon='@0x7f020000' android:debuggable='
|
190
|
+
<application android:label='@0x7f040001' android:icon='@0x7f020000' android:debuggable='false'>
|
178
191
|
<activity android:label='@0x7f040001' android:name='example.app.sample.SampleActivity'>
|
179
192
|
<intent-filter>
|
180
193
|
<action android:name='android.intent.action.MAIN'/>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_apk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-01
|
12
|
+
date: 2013-05-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rubyzip
|
@@ -184,7 +184,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
184
184
|
version: '0'
|
185
185
|
segments:
|
186
186
|
- 0
|
187
|
-
hash:
|
187
|
+
hash: 1470903068031812848
|
188
188
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
189
189
|
none: false
|
190
190
|
requirements:
|
@@ -193,7 +193,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
193
193
|
version: '0'
|
194
194
|
requirements: []
|
195
195
|
rubyforge_project:
|
196
|
-
rubygems_version: 1.8.
|
196
|
+
rubygems_version: 1.8.25
|
197
197
|
signing_key:
|
198
198
|
specification_version: 3
|
199
199
|
summary: static analysis tool for android apk
|