Android Studio エミュレータ起動できない。Permission Denied (未解決)
サーバー攻撃についてのリンク集
SECCON2015のConnect the Serverを後追いで解いた。
問題環境の構築は知識が少なかったので勉強になりました。
環境構築でMakeしたらエラー。
この通りにやったらFix出来た。
インストールの手順。(一般的)
まずはncコマンド。
そのあと、Wiresharkを入れてみた。
インターフェースがないと出るので、設定を変える。
すごく分かりやすかったです。
ありがとうございました。
UbuntuでPkcrackを試す。
UbuntuでPkcrackを試してみた。
既知平文攻撃というものらしく、かなりの早さで解けるのでびっくり。
ただ、セットアップまでかなりてこずって、なんかすごく泣きそうだった。
まずはセットアップ。windows用のexeもあるけど、64bit非対応ということで断念。
VM WareにUbuntuを立てて、そこにインストールしてみることにした。
wget http://www.unix-ag.uni-kl.de/~conrad/krypto/pkcrack/pkcrack-1.2.2.tar.gz tar xzvf pkcrack-1.2.2.tar.gz cd pkcrack-1.2.2/src make
これでMakeすると実行ファイルは出来るものの
エラーメッセージが出て、インストールは上手くいかない。
実行ファイルを直接叩くとどうも動いてるっぽい。
で、相対パスでやると上手く動かないので、
実行ファイルのあるとこに一緒に対象のファイルを投げ込んで実行。
失敗。
で、ググってたら優しい人が、ZIPファイルの圧縮率が違うと
うまく行かないことがあると教えてくれました。
ありがとうございました。
参考
qiita.com
securitymemo.blogspot.com
命令はこんな感じ。
$ ./pkcrack -C target.zip -c explanation.txt -P explanation.zip -p explanation.txt -d unzip_output
Android Studio エミュレータで写真が撮れない。(Android Studio 2.1、WIndows10)
Android スライドショーアプリサンプル
授業用にSDカードにある写真をスライドショーで表示するアプリを作成したので、リンクやソースを貼りつける。(0件チェックやってない、、、。)
できあがりは、
で、ボタンを押す、またはフリックで写真を切り替える。
build.gradleはターゲットSDKを下げてコード量を減らしている、、、。
build.gradle
apply plugin: 'com.android.application' android { compileSdkVersion 24 buildToolsVersion "24.0.2" defaultConfig { applicationId "la.fe_nuol.myapplication" minSdkVersion 21 targetSdkVersion 21 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:24.2.1' }
まずは画面。こんな感じ。
今回はアニメーションをファイルに保存。以下のファイルをanimフォルダに作成。
Animation
zoom_in_next.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:fillAfter="true"> <scale android:duration="500" android:fromXScale="0.1" android:fromYScale="0.1" android:toXScale="1" android:toYScale="1" android:pivotX="50%" android:pivotY="50%" /> <translate android:fromXDelta="100%" android:toXDelta="0" android:duration="500"/> </set>
zoom_in_prev.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:fillAfter="true"> <scale android:duration="500" android:fromXScale="0.1" android:fromYScale="0.1" android:toXScale="1" android:toYScale="1" android:pivotX="50%" android:pivotY="50%" /> <translate android:fromXDelta="-100%" android:toXDelta="0" android:duration="500"/> </set>
zoom_out_next.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:fillAfter="false"> <scale android:duration="500" android:fromXScale="1" android:fromYScale="1" android:toXScale="0.1" android:toYScale="0.1" android:pivotX="50%" android:pivotY="50%" /> <translate android:fromXDelta="0" android:toXDelta="-100%" android:duration="500"/> </set>
zoom_out_prev.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:fillAfter="false"> <scale android:duration="500" android:fromXScale="1" android:fromYScale="1" android:toXScale="0.1" android:toYScale="0.1" android:pivotX="50%" android:pivotY="50%" /> <translate android:fromXDelta="0" android:toXDelta="100%" android:duration="500"/> </set>[f:id:name_untitled:20161205143458p:plain]
MainActivity.java
package la.fe_nuol.myapplication; import android.database.Cursor; import android.gesture.GestureOverlayView; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.provider.MediaStore; import android.support.v4.view.GestureDetectorCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View; import android.view.animation.AnimationUtils; import android.widget.ImageView; import android.widget.ViewFlipper; public class MainActivity extends AppCompatActivity implements GestureDetector.OnGestureListener{ private GestureDetectorCompat mDetector; private ViewFlipper viewFlipper; Cursor cursor; private ImageView getImage() { String filePath = cursor.getString( cursor.getColumnIndex( MediaStore.Images.Media.DATA)); ImageView imageView = new ImageView(this); Bitmap bmImg = BitmapFactory.decodeFile(filePath); imageView.setImageBitmap(bmImg); return imageView; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); cursor = getContentResolver().query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null,null,null,null); cursor.moveToFirst(); viewFlipper = (ViewFlipper)findViewById(R.id.viewFlipper); viewFlipper.addView(getImage()); mDetector = new GestureDetectorCompat(this,this); } public void onPreviousClick(View view){ if(cursor.isFirst()) return; cursor.moveToPrevious(); viewFlipper.addView(getImage(),0); viewFlipper.setInAnimation( AnimationUtils.loadAnimation(this,R.anim.zoom_in_prev) ); viewFlipper.setOutAnimation( AnimationUtils.loadAnimation(this,R.anim.zoom_out_prev) ); viewFlipper.showPrevious(); if(viewFlipper.getChildCount()<=1) return; viewFlipper.removeViewAt(viewFlipper.getChildCount()-1); } public void onNextClick(View view){ if(cursor.isLast()) return; cursor.moveToNext(); viewFlipper.addView(getImage()); viewFlipper.setInAnimation( AnimationUtils.loadAnimation(this,R.anim.zoom_in_next)); viewFlipper.setOutAnimation( AnimationUtils.loadAnimation(this,R.anim.zoom_out_next)); viewFlipper.showNext(); if(viewFlipper.getChildCount()<=1) return; viewFlipper.removeViewAt(0); } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float vx, float vy) { float dx = Math.abs(e1.getX() - e2.getX()); float dy = Math.abs(e1.getY() - e2.getY()); if (dx > dy) { if (vx > 0) { onPreviousClick(null); } else { onNextClick(null); } return true; } return false; } @Override public boolean onTouchEvent(MotionEvent event) { return mDetector.onTouchEvent(event); } @Override public boolean onDown(MotionEvent event) { return true;} @Override public void onLongPress(MotionEvent event) {} @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float f1, float f2) {return true;} @Override public void onShowPress(MotionEvent event) {} @Override public boolean onSingleTapUp(MotionEvent event) {return true;} }
ジェスチャーのイベントの実装の仕方(フリック)を説明。
developer.android.com
やり方としてAsyncもあるが、今回は見送り
Tumbling Dice — [Android]Viewが表示された時のイベントを設定する
主にこのサイトを参考にしました。
techbooster.jpn.org
motogeneralpurpose.blogspot.jp
アニメーションについてはこのサイト
ありがとうございました。
Android ライブラリを使ったサンプルアプリ 今の天気
build.gradle
apply plugin: 'com.android.application' android { compileSdkVersion 24 buildToolsVersion "24.0.2" defaultConfig { applicationId "xx.xxx.weathernews" minSdkVersion 21 targetSdkVersion 21 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:24.2.1' compile 'com.squareup.okhttp:okhttp:2.7.0' compile 'com.google.code.gson:gson:2.3.1' compile 'com.jakewharton:butterknife:8.4.0' compile 'com.jakewharton:butterknife-compiler:8.4.0' compile 'com.fasterxml.jackson.core:jackson-core:2.7.1' compile 'com.fasterxml.jackson.core:jackson-annotations:2.7.1' compile 'com.fasterxml.jackson.core:jackson-databind:2.7.1' compile 'org.glassfish.main:javax.annotation:4.0-b33' }
画面をこんな感じで作る
天気アイコンをこのサイトに載っている分だけ用意する。
Weather Conditions- OpenWeatherMap
JSONファイルからModelクラスを生成して、プロジェクトに入れる。
www.jsonschema2pojo.org
MainActivity.java
package la.fe_nuol.weathernews; import android.graphics.drawable.Drawable; import android.media.Image; import android.os.Handler; import android.os.Looper; import android.provider.ContactsContract; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.ImageView; import android.widget.Spinner; import android.widget.TextView; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; import com.squareup.okhttp.Callback; import com.squareup.okhttp.OkHttpClient; import com.squareup.okhttp.Request; import com.squareup.okhttp.Response; import org.json.JSONException; import org.json.JSONObject; import java.io.IOException; import butterknife.BindDrawable; import butterknife.BindView; public class MainActivity extends AppCompatActivity { String baseUrl = "http://api.openweathermap.org/data/2.5/weather"; String appId = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; Handler mHandler; @BindView(R.id.textView) TextView weather; @BindView(R.id.imageView) ImageView icon; @BindView(R.id.textView2) TextView temperature; @BindView(R.id.textView3) TextView humidity; @BindView(R.id.textView4) TextView description; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Spinner cities = (Spinner)findViewById(R.id.spinner); cities.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { if(((TextView)view) == null) return; setWeather(((TextView)view).getText().toString()); } @Override public void onNothingSelected(AdapterView<?> parent) {} }); } @Override protected void onStart(){ super.onStart(); mHandler = new Handler(Looper.getMainLooper()); setWeather("Vientiane"); } private Drawable getIconDrawable(String name){ int id = getResources().getIdentifier("w" + name, "drawable",getPackageName()); return getDrawable(id); } private void setWeather(String cityName){ String urlText = String.format("%s?q=%s&appid=%s&units=metric",baseUrl,cityName,appId); Request request = new Request.Builder().url(urlText).build(); OkHttpClient client = new OkHttpClient(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Request request, IOException e) {} @Override public void onResponse(Response response) throws IOException { final String result = response.body().string().toString(); Runnable runnable = new Runnable() { @Override public void run() { try{ ObjectMapper mapper = new ObjectMapper(); WeatherInfo info = mapper.readValue(result, WeatherInfo.class); weather.setText(info.getWeather().get(0).getMain()); icon.setImageDrawable(getIconDrawable(info.getWeather().get(0).getIcon())); temperature.setText("temp: " + info.getMain().getTemp().toString()); humidity.setText("humidity: " + info.getMain().getHumidity().toString()); description.setText("description: " +info.getWeather().get(0).getDescription()); }catch(IOException ioe){ioe.getStackTrace();} } }; mHandler.post(runnable); } }); } }
Ubuntuで、libtinsのexampleを動かしてみた。
同僚と勉強会をしていて、libtinsを触ることになった。パケットを色々とごにょごにょできるライブラリらしい。Wi-Fiパケットセンサーの勉強をしたいということで、ちょっとだけこのライブラリを使ったコードを見たけど、、、よく分からん。
とりあえず実行例を動かしてみようという話になり、GitHubのlibtinsのサンプルをWindowsでビルドしようとしたがかなりドツボにはまった。そもそも、C++やったことなかったので、Visual Studioでインクルードファイルの追加とかよく分からん、、、。
で、インクルードファイルの追加が出来たと思ったら、Visual Studioの中のchronoファイルでエラーが起きて意味が分からなかったので断念。
次に、Ubuntuでの実行を試す。
要ると言われているものをインストールして、libtinsのサイトの手順に従ってGitをクローン。
クローンしたファイルの中に、CMakeList.txtがあったので、ビルドしてインストール。ただ、エラーが出てる、、、。なんとなく入った感じだったので、g++でexampleのソースをビルドしてインストール、実行。
そしたら、ライブラリがないって怒られた。このサイトの手順に従って、見えるようにした。
UbuntuでMeCabやKyTeaを入れてlibなんちゃらがないと言われた時 : mwSoft blog
エラーが出たものもあったが、実行出来るものもあった。
これは、ARP応答から、IPとMACアドレスのリストを表示するプログラム。
動くまで時間かかったけど、出ました。
CMakeを使って自作ライブラリをビルド&インストールしてみたまとめ - へぼいいいわけ
OpenCVのCMakeList.txtの話が載っていたのでメモ代わりにリンク貼っとく。やはり、Windowsはちょっとメンドクサイのか?
みなさま本当にありがとうございました。
ありがとうございました。